x86上的缓冲区溢出检查指令

时间:2017-05-05 21:21:42

标签: assembly visual-c++ x86

以下是为我正在拆卸的函数生成的第一个 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安全检查例程。我想肯定地知道。

2 个答案:

答案 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寄存器将参数值传递给函数。