求解jmp用代码修改内存跳转问题
本帖最后由 zhuayi112 于 2023-9-21 10:47 编辑求解下面代码
BYTE jmp = { 0xE9, 0x00, 0x00, 0x00, 0x00 ,0x90 ,0x90 }; //0x0057C46F ,0x90 ,0x90
中间怎么计算都无法正确跳转,难道是段间跳转和段内跳转?
看网上都是说 fun - adder - 5
这算也是无法显示正确的汇编指令。
给个例子啊,比如你fun函数地址多少,要写入jmp的地址多少,你算出来多少。啥也不给,那就继续按照公式fun - adder - 5计算,公式是对的 假设起跳点是00401000,跳到00401005即:00401005-00401000-5
所以你看一下你起跳点是0057C46F,然后自己拿OD改一下Jmp 看他跳哪个位置,再拿这个位置减去0057C46F再减去5,结果就是你要的,如果不对 把两个地址转10进制进行计算,得到结果以后转为16进制就可以了 也可以看我的帖子:https://www.52pojie.cn/thread-986956-1-1.html
代码注释里面有写怎么计算 本帖最后由 gchq2005 于 2023-7-12 20:28 编辑
看网上都是说 fun - adder - 5 这是错误的说法,看看CPU 执行原理,就知道 其实计算地址是 下一条指令地址 + 数值,不是减哦!因为像CALL指令 正好5字节,才会出现 当前指令地址 + 数值+5 的说法, 这有个公式的,,,第一个字节是0xE9,后面4个字节是个值,这个
值=(目的地址-当前地址-5) 感谢大家热心恢复,昨晚通过调试和手工计算, 是跳转到的地址 -修改的地址 - 5 。我是通过先手工修改jmp + 地址,然后OD自动计算出地址,在对照算出来是一样的。
页:
[1]