读书人

地址计算,该怎么处理

发布时间: 2012-02-21 16:26:23 作者: rapoo

地址计算
Program Entry Point = 00401014 (test.exe File Offset:00001239)


:00401000 6A40 push 00000040
:00401002 6A00 push 00000000
:00401004 6A00 push 00000000
:00401006 6A00 push 00000000
:00401008 E801000000 call 0040100E
:0040100D C3 ret


* Referenced by a CALL at Address:
|:00401008
|
:0040100E FF2500204000 jmp dword ptr [00402000]


想问的就是:
:00401008 E801000000 call 0040100E
E8对应的call
但是:01000000怎么就对应了0040100E.在PE中,前面那个是RVA,但是加上base 400000h,也不是0040100E.怎么计算的呢?


[解决办法]
01000000 是数据内部存储的 Byte 格式, 作为一个表示偏移的 dword 来说, 其值为 00000001. 该偏移是 call 指令的目标地址和当前 call 指令的下一条指令首地址间的偏移. call 指令的下一条指令是 ret, 其地址为 0040100D. 所以, 目标地址就是 0040100D+00000001=0040100E 了

读书人网 >汇编语言

热点推荐