13
我需要幫助才能理解以下彙編指令。在我看來,我打電話給某個未知值+ = 20994A的地址?需要幫助瞭解E8 asm調用指令x86
E8 32F6FFFF - call std::_Init_locks::operator=+20994A
我需要幫助才能理解以下彙編指令。在我看來,我打電話給某個未知值+ = 20994A的地址?需要幫助瞭解E8 asm調用指令x86
E8 32F6FFFF - call std::_Init_locks::operator=+20994A
無論您使用的是獲得拆卸嘗試是有益的,通過給呼叫是從它所知道的一些符號偏移量的目標 - 但考慮到偏移量是如此之大,它可能是困惑。
E8
是call
具有相對偏移: 呼叫的實際目標可以如下來計算。
例如
<some address> E8 32 F6 FF FF call <somewhere>
<some address>+5 (next instruction)
0xFFFFF632
。-0x9CE
。call
指令位於<some address>
,長度爲5個字節;下一條指令是<some address> + 5
。<some address> + 5 - 0x9CE
。如果你正在用反彙編器分析PE文件,反彙編器可能會給你錯誤的代碼。大多數惡意軟件編寫者使用E8的插入作爲反分解技術。您可以驗證E8以上的代碼是跳轉位置在E8之後的跳轉指令。
坦克你這麼多。你的例子是現貨! – Michael
@Matthew 調用指令的長度是否可以超過5個字節? (在x86 archi中,下一個命令是否可以在 + 6)?在什麼情況下? –
Rafa
@Rafa,調用相對偏移量指令是5個字節,因爲最大相對偏移量必須適合4個字節。如果目標遠離2 ** 31個字節,'mov reg,imm64;調用reg'被使用。 –