首页
社区
课程
招聘
[旧帖] [求助]关于CALL指令的疑问 0.00雪花
发表于: 2007-6-24 18:02 6717

[旧帖] [求助]关于CALL指令的疑问 0.00雪花

2007-6-24 18:02
6717
下边这段代码是从OD中复制出来的
0045F761   > \8B8D D8000000 MOV ECX,DWORD PTR SS:[EBP+D8]
0045F767   .  53            PUSH EBX     
0045F768   .  03CA          ADD ECX,EDX  
0045F76A   .  51            PUSH ECX   
0045F76B   .  50            PUSH EAX     
0045F76C   .  E8 0FB14800   CALL SRO_Clie.008EA880      

最后一句的CALL,为什么2进制代码 E8 0FB14800 会被翻译成 CALL SRO_Clie.008E880?已知E8是CALL,问题是后边的指令  0FB14800怎么被转成 008EA880呢?还请大家多指点

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
E8是call的指令机器码,E8后面的机器码是call到某个地方的偏移地址。
关于jmp和call指令的偏移地址机器码计算方法如下:
Call或jmp目的地址减去前面Call或jmp地址再减去Call或jmp指令的长度等于Call或jmp指令的偏移地址机器码。
目的地址 - 当前地址 = 偏移地址
如用你上面的例子计算:
当前的Call指令地址是:0045F76C
目的的Call指令地址是:008EA880
Call指令长度是5
计算结果如下:
008EA880 - 0045F76C - 5 = 00 48 B1 0F
所以上面的CALL指令机器码是:
E8 0F B1 48 00
2007-6-24 18:14
0
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
3
已经明白,多谢
2007-7-17 07:59
0
雪    币: 255
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0045F761   > \8B8D D8000000 MOV ECX,DWORD PTR SS:[EBP+D8]
0045F767   .  53            PUSH EBX     
0045F768   .  03CA          ADD ECX,EDX  
0045F76A   .  51            PUSH ECX   
0045F76B   .  50            PUSH EAX
你看看这个啊
DWORD PTR SS:[EBP+B8]
是什么东西?
是地址里的内容送到了~ECX里吗?
2007-7-20 15:56
0
游客
登录 | 注册 方可回帖
返回
//