首页
社区
课程
招聘
汇编指令转换成机器码的问题~
发表于: 2011-4-12 10:44 5974

汇编指令转换成机器码的问题~

2011-4-12 10:44
5974
用OD反汇编添加代码
jmp     00401020

机器码是
E9 1B80FFFF

jmp是E9

地址00401020机器码是1B80FFFF

怎么算的?
要算法~

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 165
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
addr1 - jmp addr2
地址 = addr2 - (addr1 + 此举指令字节数)
由于高位存储的关系,写成汇编代码次序要颠倒
2011-4-12 10:55
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
3
你得把你的 jmp 处的 地址给说出来,他们是  ***  jmp ??????
如 :00A8BEB5  \E9 7B2EF8FF     JMP 00A0ED35

00A0ED35-00A8BEB5-5 =FFFFFFFFFFF82E7B
就是??? -**** -5 ,后面减5 就是 jmp 指令的长度 5字节。。。
2011-4-12 11:00
0
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
addr1和addr2都是指什么?
2011-4-12 11:06
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
jmp     00401020   ===>  E9 1B80FFFF
      -------------                 -----------
       target                       offset

offset = target - eip   
------------------------------------------------
你的 eip 是 0x00409005,因此:

00409000:   jmp     00401020
00409005:   ... ...
2011-4-12 11:30
0
雪    币: 578
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
在汇编中,跳转指令跳转的是 "目的标号-当前EIP得出的偏移量"
而不是想像中的目的标号的地址
2011-4-12 11:40
0
雪    币: 135
活跃值: (106)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
7
这个应该这样理解:

机器码为E9的JMP指令,后面的4字节是跳转的相对偏移。
就是你要跳到的目的地址 和 相对与这条JMP指令的结束地址的偏移。
intel处理器使用的是小尾序。所以这里的字节1B80FFFF 就是偏移FFFF801B。
由此我可以推算出你写这条JMP指令的地址是00401020 - FFFF801B - 5 = 409000

所以说你应该是在409000这里写了这条JMP指令,这样就好理解了。
在409000这里第一个字节是JMP机器码E9,
后面的就是JMP指令的下一条指令的地址409005 到 你的跳转目的地址00401020的偏移。

00401020 - (409000+5) = FFFF801B =小尾序> 1B80FFFF

这样你应该能理解了吧。
2011-4-12 12:02
0
雪    币: 165
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
看格式还看不出来吗
addr1是当前指令的地址,addr2是目标地址
2011-4-12 13:06
0
游客
登录 | 注册 方可回帖
返回
//