【发布时间】:2017-05-05 21:21:42
【问题描述】:
以下是为我正在反汇编的函数生成的第一个 3 条指令。 (Windows 7 上的 Visual C++ 2015,32 位应用程序。)
push 218h
mov eax,offset MyModule!_log_pentium4+0x8cbf (53c0b577)
call MyModule!_EH_prolog3_GS (53ad7977)
我不明白第二条指令。我的实际函数(以源代码形式)只有 5 行,并且没有在其中使用任何数学函数(这与 Google 搜索 _log_pentium4 相关。)eax 中的值也很可能用于随后调用缓冲区溢出安全检查例程。我很想知道。
【问题讨论】:
-
+0x8cbf偏移量只是告诉您反汇编程序不知道正在传递什么。当然与“log_pentium”无关。我们也不知道。看起来这个函数调用设置了一个异常处理程序,它将使用一个不会出现在您的代码中的内部表。 -
要扩展 Hans 的评论并解释
log_pentium4的来源,请参阅 this blog entry。基本上,它是调试器在该近似位置的最后一个符号,因此它使用它并添加必要的偏移量。 -
@CodyGray Raymond 的博客文章为我做了这件事。谢谢!我被那个 _log_pentium 名字迷住了。也谢谢你,汉斯。
-
@HansPassant 另外,您是如何确定该函数正在根据该指令设置异常处理程序的?
标签: assembly visual-c++ x86