2017-03-15 148 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。