带有DEBUG_PROCESS标志的CreateProcess会在某些可执行文件上导致错误50
CreateProcess with DEBUG_PROCESS flag causes error 50 on some executables
我正在尝试编写小型调试器。我的简化代码是
STARTUPINFOA sui;
ZeroMemory( &sui, sizeof(sui) );
sui.cb = sizeof(sui);
PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );
DWORD dwFlags = DEBUG_PROCESS;
string program = "program.exe";
if (! CreateProcessA(NULL, (char*) program.c_str(), NULL, NULL, TRUE, dwFlags, NULL, NULL, &sui, &pi))
printf("%s failed. LastError = %d", program.c_str(), GetLastError());
对于大量的可执行文件,它运行良好。
但例如,在C#编译的可执行文件上,这段代码输出"program.exe失败。LastError=50"。错误50为Error_NOT_SUPPORTED(http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx)。造成这种情况的原因是什么?如何调试所有类型的二进制文件?
非托管调试器调试托管可执行文件的用处不大。查看MDbg示例,看看需要什么。
然而,ERROR_NOT_SUPPORTED错误并不是托管可执行文件独有的,尽管更可能的是,当您尝试使用32位调试器调试64位可执行文件时也会出现此错误。将x64平台目标添加到您的项目中,以构建其64位版本。
相关文章:
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"
- "what does ":*** [可执行文件] 错误 1 " mean ?"
- 尝试运行可执行文件时出现分段错误
- 在动态加载的位置无关的可执行文件中分离错误
- 配置:错误:C++编译器无法创建可执行文件
- C++ 可执行文件错误:无法打开共享对象文件:没有此类文件或目录
- 如何从命令行运行可执行文件时启用系统错误消息
- cusparse功能的多个定义错误在链接可执行文件中的cuda文件时
- Eclipse Ubuntu 中的“程序不是可识别的可执行文件”错误
- 通过Linux命令行执行时,可执行文件运行正常 - 调用C System()命令时运行时错误
- LD_BIND_NOW:符号查找错误,但可执行文件仍在运行
- Unix可执行文件上的Mac分段错误,文件编译正常
- VC 2010可执行文件未在其他计算机上运行-无错误
- 带有DEBUG_PROCESS标志的CreateProcess会在某些可执行文件上导致错误50
- 从 Java 运行可执行文件时C++没有错误或输出
- C++ Sun Solaris 11 中的可执行文件错误
- 运行时错误 -f1.exe 不存在或不是可执行文件
- C++程序上的执行错误:静态可执行文件调用 DLL 库
- PHP PDO_ODBC配置:错误:C 编译器无法创建可执行文件