汇编中的JMP后面的值也就是E9 XXXX怎样计算的

来源:百度知道 编辑:UC知道 时间:2024/06/25 01:51:11
004ED879: E9 8327B1FF JMP 00000001
004ED87E: E9 7F27B1FF JMP 00000002
004ED883: E9 7B27B1FF JMP 00000003
004ED888: E9 7727B1FF JMP 00000004
004ED88D: E9 7327B1FF JMP 00000005
=======================================================
004ED879: E9 8427B1FF JMP 00000002
004ED87E: E9 7F27B1FF JMP 00000002
004ED883: E9 7B27B1FF JMP 00000003
004ED888: E9 7727B1FF JMP 00000004
004ED88D: E9 7327B1FF JMP 00000005
===============================
000000x的值是怎样转换成汇编编码的?
没有规律啊
还有两处==号的02,随着内存地址不一样,就算值一样都是02
但他E9后面的汇编还是不一样

例如我想Jmp 40
那么如果不用汇编工具,怎样才能转换正确的E9 XXXXXXX

你这是32位汇编,000000x的值转换成汇编编码的规律:
jmp 0002H
IP1=004ED879H
IP2=00000002H
IP2-(IP1+本句指令字节数)=2-(4ED879H+5)=0FFB12784H

Jmp 0040H
IP1=004ED879H
IP2=40H
IP2-(IP1+本句指令)=40-(4ED879H+5)=FFB127C2H
汇编里的数次序要反过来:
E9 C227B1FF
以上只是远跳转,近跳转"本句指令字节数"会缩短。

这个简单,首先记住相对跳转是
1、本条指令执行之后的地址是跳转前地址
2、Intel高位低存

用第一个举例:
8327B1FF 转换成整数: FFB12783

然后 FFB12783+004ED87E= (1) 0000 0001

进位消去

你上面的代码是,反编译后的机器码把.把汇编源码发上来看看