2017-03-15 225 views
0

我是彙編新手,正在閱讀一篇介紹Ollydbg彈球功能示例的指南。我試圖瞭解大多數的指示做的,但下面這行已經我徹底糊塗:x86英特爾彙編中的尖括號

01017455 |. E8 249D0000 CALL <JMP.&[email protected]@Z> 

什麼尖括號在這方面是什麼意思?並且有沒有什麼有意義的功能名稱? 「JMP」。在名稱中也有困惑 - 它只是函數名稱的一部分,應該忽略?

回答

2

這似乎是在您的文件中調用靜態鏈接的.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來重現它。

-1

尖括號用於Windows API調用。

例如,如果我使用Kernel32庫中的函數,它將使用角括號調用Kernel32。