首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

地址计算,该怎么处理

2012-02-21 
地址计算ProgramEntryPoint00401014(test.exeFileOffset:00001239):004010006A40push00000040:004010026A

地址计算
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 了

热点排行