我正在使用汇编语言和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)
谢谢你的帮助!
你的问题是你传递的是十进制值,而不是十六进制值,你应该使用set {char}0x00058094=0x85或set {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的原因.
(我有点失望,因为我没有早点注意到......)
| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |