我是彙編新手,正在閱讀一篇介紹Ollydbg彈球功能示例的指南。我試圖瞭解大多數的指示做的,但下面這行已經我徹底糊塗:x86英特爾彙編中的尖括號
01017455 |. E8 249D0000 CALL <JMP.&[email protected]@Z>
什麼尖括號在這方面是什麼意思?並且有沒有什麼有意義的功能名稱? 「JMP」。在名稱中也有困惑 - 它只是函數名稱的一部分,應該忽略?
我是彙編新手,正在閱讀一篇介紹Ollydbg彈球功能示例的指南。我試圖瞭解大多數的指示做的,但下面這行已經我徹底糊塗:x86英特爾彙編中的尖括號
01017455 |. E8 249D0000 CALL <JMP.&[email protected]@Z>
什麼尖括號在這方面是什麼意思?並且有沒有什麼有意義的功能名稱? 「JMP」。在名稱中也有困惑 - 它只是函數名稱的一部分,應該忽略?
這似乎是在您的文件中調用靜態鏈接的.LIB
。在Windows上,通過在可執行文件的特殊部分中調用JMP
指令來實現API /庫調用。
例如
CALL <JMP.&[email protected]@Z>
會做CALL
以下指令
JMP.&[email protected]@Z
的CALL
將返回地址到堆棧,然後跳轉到本節中的以下JMP
指令。這JMP
將不會修改返回地址 - 所以它有效像直接CALL
。
簡化:
curEIP:
CALL <JMP.&[email protected]@Z> ; pushes (curEIP+insLen) to the stack and JMPs to (some virtual label named) `msvcrt.??3` in this section named above
...
msvcrt.??3:
JMP [email protected] ; JMPs to `[email protected]` - address of the real function in the statically linked LIB in memory
...
; after the CALL completes...
...返回到先前壓入堆棧(初始EIP + instructionLengthInBytes)繼續執行,返回值地址。
尖括號在這方面的含義是什麼?
他們只是顯示你上面的方案
的相關數據的慣例,是有什麼在函數的名稱有意義?
是的。往上看。括號內的名稱不同於調試器到調試器。
「JMP」。在名稱中也有困惑 - 它只是函數名稱的一部分,應該忽略?
的<JMP...
簡單incidcates,下列字符/地址要被解釋爲在可執行一個參考跳轉表爲靜態鏈接庫(在提及的(見上文)特別包括部分)。看一下PE-Explorer/Debugger來重現它。
尖括號用於Windows API調用。
例如,如果我使用Kernel32庫中的函數,它將使用角括號調用Kernel32。