首页
社区
课程
招聘
[旧帖] 为什么机器码和汇编码中CALL的地址看起来不一样 0.00雪花
发表于: 2011-3-23 19:59 4231

[旧帖] 为什么机器码和汇编码中CALL的地址看起来不一样 0.00雪花

2011-3-23 19:59
4231


有的些地方机器码和汇编码CALL的地址是相对应的.图中第二条指令,看起来地址就不一样,是什么问题呢
还有个问题是,同一个软件,不同版本的两个主程序.他们汇编码一样的地方,机器码不相同,不知是为什么

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 31
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一条汇编代码是可以对应2条以上的二进制串的
比如说mov eax, 0
可能对应的二进制代码有:
1) C7 C0 00 00 00 00
2) B8 00 00 00 00
所以会有不同的机器码!
2011-3-24 09:11
0
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
没有看到楼主的图,不过从我的经验来看的话。函数调用两种方式:一种是近调用,用的是相对地址。这个相对地址也是下一条指令的相对偏移量。而另外的一种调用方式就是绝对地址的远调用。
两者的机器码也是不一样的。
若为E8的为近调用,B4的为远调用,而用绝对寻址方式..。
所以我想是不同的编译版本导致了不同的调用方法吧。
因为近调用的话可以使代码更小
2011-3-26 11:14
0
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
因为Call XXXXXXXX用的是相对地址

例如E8 00 00 00 00 Call当前地址
eg:
00401000 >  E8 00000000     call    00401005
00401005

如果要绝对地址跳,那么我推荐把地址存进EAX,然后Call Eax
2011-3-27 14:43
0
游客
登录 | 注册 方可回帖
返回
//