如何修改从j到jne的6字节内存地址

spa*_*ker 0 assembly hex

我正在使用汇编语言和gdb尝试修改内存地址:

+67 00058093 0f84e8000000 je 0x00058181

id喜欢改变读取84到85的第二个字节,以便指令成为jne.然后我打破代码后在gdb中执行以下操作:

set {char}0x00058094=85
Run Code Online (Sandbox Code Playgroud)

但我得到以下"andnps%xmm0,%xmm5"而不是jne:

(gdb)disas
0x00058093 <-[SWBConditionalImplementations checkRegistration:preferences:callbacks:]+67>:  andnps %xmm0,%xmm5
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Nec*_*lis 5

你的问题是你传递的是十进制值,而不是十六进制值,你应该使用set {char}0x00058094=0x85set {char}0x00058094=133做你想做的事情,或者set *((char*)0x00058094) = 0x85也可以.

反汇编使这一点更清晰:

0F55E8                             ANDNPS XMM5,XMM0
Run Code Online (Sandbox Code Playgroud)

0F85 E8000000                      JNZ 004010F1
Run Code Online (Sandbox Code Playgroud)

85是0x55,这就是你得到SIMD指令而不是你想要的JNE的原因.

(我有点失望,因为我没有早点注意到......)