0

如果我设置类似 0x00000040 的内容(我的代码位于此地址),则程序会因以下错误而崩溃:

The application was unable to start correctly (0xc000007b)

但是如果我从代码部分跳转到 0x00400040 那么它就可以了。

为什么我收到那个奇怪的地址 (0xc000007b) 错误?是否可以从位于部分之外的代码开始执行程序?

我使用 Windows 8。

4

1 回答 1

0

0xc000007b是来自 Windows 的错误代码。你可以在这里查找它们。你的是STATUS_INVALID_IMAGE_FORMAT.

我假设您AddressOfEntryPoint在 PE Header 中进行了修改。对于这里

AddressOfEntryPoint: 指向入口点函数的指针,相对于图像基地址。对于可执行文件,这是起始地址。对于设备驱动程序,这是初始化函数的地址。入口点函数对于 DLL 是可选的。当不存在入口点时,此成员为零。

因此,如果将此值设置为 0x40,它将指向 DOS 标头中的地址(模块的最开始)。内存中的标头块没有正确的内存保护来执行,因此 OS 加载程序将失败。

我的猜测是您实际上想跳转到 0x1040,在具有典型可执行文件的 Windows 8 系统上,该位置将位于代码段第一个地址之后的 0x40 字节处。

于 2013-08-25T15:23:06.697 回答