2011-12-10 57 views
4

的彙編代碼我successfuly改變的指令到NOP,因爲它是非常基本的:GDB:改變正在運行的程序

set *0x08048e3a = 0x90 

但我想改變其中有je 0x8048e52這個地址0x08048e3a。我想將其更改爲je 0x8048ea8

但是當我做set *0x08048e3a = 0x74168048ea8它不起作用。 (0x7416 = je指令)

謝謝

回答

8

0x74168048ea8是一個字長。您應該嘗試逐個設置字節,例如

set *(char*)0x08048e3a = 0x74 
    set *(char*)0x08048e3b = 0x16 

+1

另外請注意,在x86的'CALL'和'JMP'指令是PC相對(即,指令編碼的實際字節×偏移量*從當前insruction到跳轉目標(更精確的說,從* next *指令偏移))。因此,如果你想'JE 0x8048ea8',實際的指令字節將*不*包含'0x8048ea8'。 –

+0

謝謝你的答案。我認爲16是「je」指令的一部分。但這是跳到的偏移量。 –