我將如何跳轉到 intel 匯編語法(x32 和 x64)中的已知記憶體地址。
我想我有 64 位語法。例如,如果在 x64 中我想跳轉到 at 的代碼0x75767并且我位于 at 0000,我會這樣做:
0000: FF 25 01 00 00 00 jmp QWORD PTR [rip 0x75761]
^ 對嗎?我想我可以使用 objdump 將那些位元組分解為 x32 指令objdump.exe -D -Mintel,i386 -b binary -m i386 test.bin,結果是:
jmp DWORD PTR 0x75761
然后只需使用clang .exe -masm=intel -m32 -c test.o將此指令轉換為 x32 位元組,但它說:
error: invalid operand for instruction
jmp DWORD PTR 0x75761
^
我想避免寫入任何暫存器。
我的 x64 jmp 指令是否正確?
我將如何在 x32 中完成類似的事情?假設在 x32 中我需要跳轉到0x400107并且我在0x400000
我正在調整 Windows 上的運行行程記憶體。如果我的問題有不準確之處,請見諒,我正在學習。
uj5u.com熱心網友回復:
目前尚不清楚您是否需要匯編或機器代碼。如果要跳轉到絕對地址,則在 64 位模式下使用嵌入式指標尋址 rip relative:
jmp [rip foo]
foo: .quad target_address
機器碼:(ff 25 00 00 00 00 xx xx xx xx xx xx xx xx最后 8 個位元組為目標絕對地址)。
在 32 位代碼中,如果您不擔心分支預測,可以使用push 技巧:ret
push offset foo
ret
機器碼:68 xx xx xx xx c3
如果您可以計算相對地址,您當然可以只使用法線jmp,e9 xx xx xx xx最后 4 個位元組是跳轉的距離(從指令后面的位元組開始計算,通常會繼續執行)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/472513.html
上一篇:比較相同字母的大小寫版本
