x86 Intel 汇编中的尖括号
Angle brackets in x86 Intel assembly
我是汇编的新手,正在阅读一本指南,其中介绍了取自 Ollydbg 的 pinball 函数示例。我试图理解大部分说明的作用,但下面一行让我完全困惑:
01017455 |. E8 249D0000 CALL <JMP.&msvcrt.??3@YAXPAX@Z>
尖括号在这方面是什么意思?该函数的名称有什么意义吗?名称中的 "JMP." 也令人困惑 - 它只是函数名称的一部分并且应该被忽略吗?
这似乎是对文件中静态链接 .LIB
的调用。在 Windows 上,API/library 调用是通过调用 executable 的特殊部分中的 JMP
指令实现的。
例如
CALL <JMP.&msvcrt.??3@YAXPAX@Z>
会对下面的指令
执行CALL
JMP.&msvcrt.??3@YAXPAX@Z
CALL
将return地址压栈,然后跳转到本段后面的JMP
指令。这个 JMP
不会修改 return 地址 - 所以它实际上就像一个直接的 CALL
.
简化版:
curEIP:
CALL <JMP.&msvcrt.??3@YAXPAX@Z> ; pushes (curEIP+insLen) to the stack and JMPs to (some virtual label named) `msvcrt.??3` in this section named above
...
msvcrt.??3:
JMP YAXPAX@Z ; JMPs to `YAXPAX@Z` - address of the real function in the statically linked LIB in memory
...
; after the CALL completes...
...它returns到之前压入堆栈的return值地址(初始EIP+instructionLengthInBytes)继续执行。
What do angle brackets mean in this respect?
只是约定俗成,将上述方案的相关数据展示给大家
and is there anything meaningful in the name of that function?
是的。看上面。括号中的名称因调试器而异。
The "JMP." in the name has confused as well - is it just part of the function name and should be ignored?
<JMP...
简单地指出,以下 chars/address 将被解释为对 executable 中静态链接库的跳转 table 的引用(在(上面提到的)特殊包含部分)。看看 PE-Explorer/Debugger 重演那个。
尖括号用于 Windows API 调用。
例如,如果我使用 Kernel32 库中的函数,它会调用带有天使括号的 Kernel32。
我是汇编的新手,正在阅读一本指南,其中介绍了取自 Ollydbg 的 pinball 函数示例。我试图理解大部分说明的作用,但下面一行让我完全困惑:
01017455 |. E8 249D0000 CALL <JMP.&msvcrt.??3@YAXPAX@Z>
尖括号在这方面是什么意思?该函数的名称有什么意义吗?名称中的 "JMP." 也令人困惑 - 它只是函数名称的一部分并且应该被忽略吗?
这似乎是对文件中静态链接 .LIB
的调用。在 Windows 上,API/library 调用是通过调用 executable 的特殊部分中的 JMP
指令实现的。
例如
CALL <JMP.&msvcrt.??3@YAXPAX@Z>
会对下面的指令
执行CALL
JMP.&msvcrt.??3@YAXPAX@Z
CALL
将return地址压栈,然后跳转到本段后面的JMP
指令。这个 JMP
不会修改 return 地址 - 所以它实际上就像一个直接的 CALL
.
简化版:
curEIP:
CALL <JMP.&msvcrt.??3@YAXPAX@Z> ; pushes (curEIP+insLen) to the stack and JMPs to (some virtual label named) `msvcrt.??3` in this section named above
...
msvcrt.??3:
JMP YAXPAX@Z ; JMPs to `YAXPAX@Z` - address of the real function in the statically linked LIB in memory
...
; after the CALL completes...
...它returns到之前压入堆栈的return值地址(初始EIP+instructionLengthInBytes)继续执行。
What do angle brackets mean in this respect?
只是约定俗成,将上述方案的相关数据展示给大家
and is there anything meaningful in the name of that function?
是的。看上面。括号中的名称因调试器而异。
The "JMP." in the name has confused as well - is it just part of the function name and should be ignored?
<JMP...
简单地指出,以下 chars/address 将被解释为对 executable 中静态链接库的跳转 table 的引用(在(上面提到的)特殊包含部分)。看看 PE-Explorer/Debugger 重演那个。
尖括号用于 Windows API 调用。
例如,如果我使用 Kernel32 库中的函数,它会调用带有天使括号的 Kernel32。