当前位置: 代码迷 >> 汇编语言 >> 地址计算,该怎么处理
  详细解决方案

地址计算,该怎么处理

热度:6128   发布时间:2013-02-26 00:00:00.0
地址计算
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 了
  相关解决方案