以下是为我正在拆卸的函数生成的第一个 3指令。 (Windows 7上的Visual C ++ 2015,32位应用程序。)
push 218h
mov eax,offset MyModule!_log_pentium4+0x8cbf (53c0b577)
call MyModule!_EH_prolog3_GS (53ad7977)
我不明白第二条指令。我的实际功能(源代码形式)只有5行,没有在哪里,我使用任何数学函数(这是谷歌搜索_log_pentium4
所涉及的。)它也很可能是eax中的值是用于后续调用Buffer Overflow安全检查例程。我想肯定地知道。
答案 0 :(得分:2)
MyModule!_log_pentium4+0x8cbf (53c0b577)
- 这是指向所谓范围表(EH*_SCOPETABLE_RECORD
数组)的指针。
在此处详细了解此信息 - Where is my exception handler code in the function disassembly?或此处 - reversing Microsoft Visual C++ Part I: Exception Handling
你也可以查看msvc crt文件夹 - \ VC \ crt \ src \ i386 \ chandler4.c 或者像这样(取决于crt版本)
typedef struct _EH4_SCOPETABLE_RECORD
{
ULONG EnclosingLevel;
PEXCEPTION_FILTER FilterFunc;
union
{
PEXCEPTION_HANDLER HandlerAddress;
PTERMINATION_HANDLER FinallyFunc;
} u;
} EH4_SCOPETABLE_RECORD, *PEH4_SCOPETABLE_RECORD;
在第二个链接中,此结构名为_SCOPETABLE_ENTRY
答案 1 :(得分:0)
它显然是使用EAX寄存器将参数值传递给函数。