关于IDA修改jz指令跳转的问题
如图所示,该代码的红色箭头处原来是jz,我修改为jnz了。但是运行时仍然会往右边走(未修改之前也是往右边走)。想请教一下各位大佬,我想让代码往左边走,应该怎么修改? 让程序不跳转,将跳转指令修改成 nop
让程序一直跳转,将 jz或jnz 跳转修改为 jmp
我猜测你是通过F2 修改的,或者 编辑里面的patch 修改的。
这样的只改变了文本显示而已。
要修改调试器调用的执行程序才行,比如对应的exe dll HonDmOon 发表于 2024-2-26 16:21
让程序不跳转,将跳转指令修改成 nop
让程序一直跳转,将 jz或jnz 跳转修改为 jmp
按上面的情况,nop的话就是左右两边都不会跳了吧;
jmp的话需要跟一个地址,但是左边这里又没有地址,所以不知道应该怎么改? 飘零星夜 发表于 2024-2-26 16:22
我猜测你是通过F2 修改的,或者 编辑里面的patch 修改的。
这样的只改变了文本显示而已。
我是通过-->-->修改对应的exe的 我看你的回答,你是不是修改完之后没用apply patch bytes to xxxxx,至于为什么左边没有地址,你百度一下怎么显示,可以直接jmp到地址,不要看ida给你生成的loc_aaaaa。 xuri422 发表于 2024-2-26 16:24
按上面的情况,nop的话就是左右两边都不会跳了吧;
jmp的话需要跟一个地址,但是左边这里又没有地址,所 ...
就你图片的代码:
nop 是走左侧流程,不会跳转;
jmp loc_428479; 走右侧流程,强制跳转;
应用patch 是ida ->-> 是的,我忘记贴后面的步骤,都有Apply patches to input file...
在Output窗口也已经显示:
Applied 1/1 patch(es)
Applied 2/2 patch(es)这些提示了。 怎么知道jz和jnz的操作码呀?还有就是32位的芯片对应的一条指令的机器码怎么只有16位呀 ZeHao666 发表于 2024-2-26 22:14
怎么知道jz和jnz的操作码呀?还有就是32位的芯片对应的一条指令的机器码怎么只有16位呀
可以在调试器编译对应指令来查看。
短跳的 JZ/JE 对应的操作码(OpCode)是 `74`,JNZ/JNE 是 `75` —— 参数(Operand)长度为 1 字节。
远跳的 JZ/JE 对应的操作码(OpCode)是 `0F 84`,JNZ/JNE 是 `0F 85` —— 参数(Operand)长度为 4 字节。
> 还有就是32位的芯片对应的一条指令的机器码怎么只有16位呀
x86 指令集属于复杂指令集(CISC),其指令编码长度不固定。
页:
[1]
2