考慮下面的x86彙編指令:獲取操作數從指令
mov esi, offset off_A
cmp esi, offset off_B
我怎麼會在運行時得到的偏移量(第二個操作數)?這是情景:一個程序(注入在運行時的過程)替換了一些自己的偏移量,導致:
mov esi, offset off_X
cmp esi, offset off_Y
這個程序允許插件編寫並加載通過它,但不公開替換地址。因此,考慮到上述說明存在的地址,我如何找到偏移量X和Y?
考慮下面的x86彙編指令:獲取操作數從指令
mov esi, offset off_A
cmp esi, offset off_B
我怎麼會在運行時得到的偏移量(第二個操作數)?這是情景:一個程序(注入在運行時的過程)替換了一些自己的偏移量,導致:
mov esi, offset off_X
cmp esi, offset off_Y
這個程序允許插件編寫並加載通過它,但不公開替換地址。因此,考慮到上述說明存在的地址,我如何找到偏移量X和Y?
我不太明白這是對的,但是...
mov esi, ...
編碼爲BE
其次是雙字操作數。如果你有mov
指令的地址你根本就跳到一個字節,看看地址操作數,off_A
cmp esi, ...
編碼爲81 FE
後跟一個雙字操作數,所以在這裏你可以跳過兩個字節來看看操作數。
我不確定你在問什麼。偏移量是的地址。因此,第一行代碼將off_9F6FBC
的地址移動到esi。
如果你的意思是如何得到絕對地址(結合PIC等),那麼在反彙編時就無法知道這個地址。它只是在運行時已知的,可以改變每運行
有很多方法可以對MOV esi進行編碼,立即。取決於你的彙編器和編譯器,它們中的任何一個都可能被使用。
如果不使用匯編器助記符,如十六進制。你可以在這裏找到補償點:
db 0xBE; off_X: dd normal_offset
不明確的道歉。我已經編輯了該問題以包含有關使用場景的詳細信息。希望現在更清楚。 – shadeMe 2010-05-14 02:44:50