Assembly GDB:更改正在运行的程序的汇编代码
我成功地将指令更改为Assembly GDB:更改正在运行的程序的汇编代码,assembly,gdb,Assembly,Gdb,我成功地将指令更改为NOP,因为它非常基本: set *0x08048e3a = 0x90 但我正在尝试更改此地址0x08048e3a,它具有je 0x8048e52。我想将其更改为je0x8048ea8 但是,当我设置*0x08048e3a=0x74168048ea8时,它不起作用。 (0x7416=je指令) 谢谢你0x74168048ea8比一个字还长。您应该尝试逐个设置字节,例如 set *(char*)0x08048e3a = 0x74 set *(char*)0x08048
NOP
,因为它非常基本:
set *0x08048e3a = 0x90
但我正在尝试更改此地址0x08048e3a
,它具有je 0x8048e52
。我想将其更改为je0x8048ea8
但是,当我设置*0x08048e3a=0x74168048ea8时,它不起作用。
(0x7416
=je
指令)
谢谢你
0x74168048ea8
比一个字还长。您应该尝试逐个设置字节,例如
set *(char*)0x08048e3a = 0x74
set *(char*)0x08048e3b = 0x16
etc还请注意,在x86上,
调用
和JMP
指令是PC相关的(也就是说,指令的实际字节编码从当前指令到跳转目标的偏移量(更准确地说,是从下一条指令的偏移量))。因此,如果您想JE 0x8048ea8
,实际指令字节将不包含0x8048ea8
。谢谢您的回答。我认为16是“je”指令的一部分。但它是要跳转到的偏移量。要保存一些键入,可以像set*(char*)中那样一次设置一些字节0x08048e3a@5={0x74,0x16,0x80,0x48,0xea}