xuri422 发表于 2024-2-26 16:12

关于IDA修改jz指令跳转的问题

如图所示,该代码的红色箭头处原来是jz,我修改为jnz了。但是运行时仍然会往右边走(未修改之前也是往右边走)。
想请教一下各位大佬,我想让代码往左边走,应该怎么修改?

HonDmOon 发表于 2024-2-26 16:21

让程序不跳转,将跳转指令修改成 nop
让程序一直跳转,将 jz或jnz 跳转修改为 jmp

飘零星夜 发表于 2024-2-26 16:22

我猜测你是通过F2 修改的,或者 编辑里面的patch 修改的。
这样的只改变了文本显示而已。

要修改调试器调用的执行程序才行,比如对应的exe dll

xuri422 发表于 2024-2-26 16:24

HonDmOon 发表于 2024-2-26 16:21
让程序不跳转,将跳转指令修改成 nop
让程序一直跳转,将 jz或jnz 跳转修改为 jmp

按上面的情况,nop的话就是左右两边都不会跳了吧;
jmp的话需要跟一个地址,但是左边这里又没有地址,所以不知道应该怎么改?

xuri422 发表于 2024-2-26 16:25

飘零星夜 发表于 2024-2-26 16:22
我猜测你是通过F2 修改的,或者 编辑里面的patch 修改的。
这样的只改变了文本显示而已。



我是通过-->-->修改对应的exe的

zhuxiangyu1024 发表于 2024-2-26 16:29

我看你的回答,你是不是修改完之后没用apply patch bytes to xxxxx,至于为什么左边没有地址,你百度一下怎么显示,可以直接jmp到地址,不要看ida给你生成的loc_aaaaa。

HonDmOon 发表于 2024-2-26 16:31

xuri422 发表于 2024-2-26 16:24
按上面的情况,nop的话就是左右两边都不会跳了吧;
jmp的话需要跟一个地址,但是左边这里又没有地址,所 ...

就你图片的代码:
nop 是走左侧流程,不会跳转;
jmp loc_428479; 走右侧流程,强制跳转;

应用patch 是ida ->->

xuri422 发表于 2024-2-26 16:47

是的,我忘记贴后面的步骤,都有Apply patches to input file...
在Output窗口也已经显示:
Applied 1/1 patch(es)
Applied 2/2 patch(es)这些提示了。

ZeHao666 发表于 2024-2-26 22:14

怎么知道jz和jnz的操作码呀?还有就是32位的芯片对应的一条指令的机器码怎么只有16位呀

爱飞的猫 发表于 2024-2-28 01:45

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
查看完整版本: 关于IDA修改jz指令跳转的问题