[英]How do I find out my .exe's entry-point function?
我问这个问题非常愚蠢,但是请在评论“它是main()
,duh”之前忍受并阅读症状。
我正在Visual Studio Express 2012中的一个项目上。到目前为止,我们仅针对Win32(x86)平台进行了构建,但是我正在将.exe构建转换为64位。 我现在有一个完全链接的.exe,但是在此过程中发生了一件有趣的事情:不再调用入口点。
(C ++控制台)程序的入口点是在文件范围内声明的具有以下签名的C ++函数: int main(int argc, char * argv[])
。 从第1天开始,该函数在x86可执行文件中就很愉快了。在x64上没有调用此函数:
main
例如int * p(nullptr); *p = 5;
int * p(nullptr); *p = 5;
,程序不会崩溃(即使没有这个,我也肯定main()
没有运行)。 是什么导致此问题? 我该如何调试? 由于我的代码都不曾运行,因此我不确定在调试器中的哪里设置断点...
0xc000007b
是STATUS_INVALID_IMAGE_FORMAT
。 也就是说,操作系统甚至从未加载过足够的二进制文件以开始执行它。
您的编译设置可能有问题。 但是,通常当我看到此错误时,问题出在试图动态链接到32位DLL的64位应用程序中。
检查您的库,并验证您的路径是否指向任何DLL的64位版本。
该errlook
效用说127是“指定的程序无法找到。”搜索文本在<winerror.h>
产生ERROR_PROC_NOT_FOUND
。
这听起来像是DLL问题。
现在,我不喜欢将术语“入口点”应用到main
,因为然后应该调用入口点,即您提供给链接器以设置入口点的地址吗? 启动功能可能更好。 这不仅是令人困惑:微软的技术作家已经彻底混淆了自己,以至于现在可以庆祝20年来有关PE入口点的不正确且仅有自相矛盾的文档。 我认为他们永远做不到。
根据我的经验, gdb
非常不可靠,不是检查是否调用了某些东西的好工具。 这是不可靠的,至少在将我检测为用户时才如此。 而是在main
一个消息框或其他易于识别和保证的内容。
您可以通过/ ENTRY编译器标志找到(并修改)exe的入口点。
http://msdn.microsoft.com/en-us/library/f9t8842e.aspx
在Visual Studio开发环境中设置此链接器选项
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.