0

我正在尝试在调试器(ollydbg)中遵循我用 C++ 编译的一个简单程序的执行指令(它计算一些素数然后退出),但我有几个问题:

  • 为什么第一条指令不是“CODE”部分的入口点?他们有区别
  • 一旦我“跳过”一些指令,调试器就会崩溃并写入“ntdll.someaddress 处的单步事件,按 shift+F7/F8/F9 将异常传递给程序”并崩溃。如果我在不执行指令的情况下运行程序,它可以正常工作并且程序加载没有问题

为什么会这样?这不仅发生在我的程序中,而且发生在其他几个程序中(我系统中几乎每隔一个 32 位 exe)

4

1 回答 1

0

如果你在 64 位操作系统下运行 OllyDbg,我相信你不走运,因为 OllyDbg 不支持 x86-64 Windows,甚至不支持用于调试 32 位应用程序的调试器。看到这个论坛帖子,它是从 2006 年开始的,但我认为从那以后没有任何变化。他们建议使用不同的调试器,例如 64 位版本的 WinDbg(这是一个很棒的调试器)。

为什么第一条指令不是“CODE”部分的入口点?他们有区别

您可以在 OllyDbg 中进行设置:选项 - 调试选项 - 事件 - “首先暂停”。您可以从“系统断点”开始,它位于 ntdll 中,甚至在调用启动模块的入口点之前就被调用。

于 2012-05-02T21:38:55.740 回答