我是汇编新手,正在阅读一篇介绍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。