grdb not working variables

Posted by stupid_idiot on Stack Overflow See other posts from Stack Overflow or by stupid_idiot
Published on 2010-03-15T17:14:51Z Indexed on 2010/03/17 5:51 UTC
Read the original article Hit count: 225

Filed under:
|
|
|

hi, i know this is kinda retarded but I just can't figure it out. I'm debugging this:

xor eax,eax

mov ah,[var1]
mov al,[var2]

call addition

stop: jmp stop

var1: db 5
var2: db 6

addition:
add ah,al
ret

the numbers that I find on addresses var1 and var2 are 0x0E and 0x07. I know it's not segmented, but that ain't reason for it to do such escapades, because the addition call works just fine. Could you please explain to me where is my mistake?


I see the problem, dunno how to fix it yet though. The thing is, for some reason the instruction pointer starts at 0x100 and all the segment registers at 0x1628. To address the instruction the used combination is i guess [cs:ip] (one of the segment registers and the instruction pointer for sure). The offset to var1 is 0x10 (probably because from the begining of the code it's the 0x10th byte in order), i tried to examine the memory and what i got was:

1628:100 8 bytes
1628:108 8 bytes
1628:110 <- wtf? (assume another 8 bytes)
1628:118 ...

whatever tricks are there in the memory [cs:var1] points somewhere else than in my code, which is probably where the label .data would usually address ds.... probably.. i don't know what is supposed to be at 1628:10


ok, i found out what caused the assness and wasted me whole fuckin day. the behaviour described above is just correct, the code is fully functional. what i didn't know is that grdb debugger for some reason sets the begining address to 0x100... the sollution is to insert the directive ORG 0x100 on the first line and that's the whole thing. the code was working because instruction pointer has the right address to first instruction and goes one by one, but your assembler doesn't know what effective address will be your program stored at so it pretty much remains relative to first line of the code which means all the variables (if not using label for data section) will remain pointing as if it started at 0x0. which of course wouldn't work with DOS. and grdb apparently emulates some DOS features... sry for the language, thx everyone for effort, hope this will spare someone's time if having the same problem...

heheh.. at least now i know the reason why to use .data section :))))

© Stack Overflow or respective owner

Related posts about assembly

Related posts about variables