调试dll和exe加载失败
2010-10-20 21:33
169 查看
如果启动程序时出现《应用程序正常初始化(0xc0000142)失败。请单击“确定”,终止应用程序》这种错误,可以先用depends.exe这个工具来看依赖没有问题。如果没有问题,可以用resourcehacker之类的工具看exe和dll的资源段的manifest信息,通过这个来看依赖的crt是否正确,特别要注意不同dll之间这个信息可能不一样(一个exe不能同时加载多个版本的crt)。如果还不能解决,只能通过调试器来分析了。通过devenv.exe 《程序路径》来启动程序,然后打开下面的文件,并在相应地方设置断点:
dll的入口点:
C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/dllcrt0.c
BOOL WINAPI
_DllMainCRTStartup(
HANDLE hDllHandle,
DWORD dwReason,
LPVOID lpreserved
)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
/*
* The /GS security cookie must be initialized before any exception
* handling targetting the current image is registered. No function
* using exception handling can be called in the current image until
* after __security_init_cookie has been called.
*/
__security_init_cookie();
}
return __DllMainCRTStartup(hDllHandle, dwReason, lpreserved);
}
调试dll加载失败也可在C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/dllcrt0.c的100行设置断点。
BOOL WINAPI _CRT_INIT(
HANDLE hDllHandle,
DWORD dwReason,
LPVOID lpreserved
)
exe部分
C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/crt0.c的199行为exe的入口点
_declspec(noinline)
int
__tmainCRTStartup(
void
)
C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/_file.c的112行为初始化stdio的函数
int __cdecl __initstdio(void)
dll的入口点:
C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/dllcrt0.c
BOOL WINAPI
_DllMainCRTStartup(
HANDLE hDllHandle,
DWORD dwReason,
LPVOID lpreserved
)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
/*
* The /GS security cookie must be initialized before any exception
* handling targetting the current image is registered. No function
* using exception handling can be called in the current image until
* after __security_init_cookie has been called.
*/
__security_init_cookie();
}
return __DllMainCRTStartup(hDllHandle, dwReason, lpreserved);
}
调试dll加载失败也可在C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/dllcrt0.c的100行设置断点。
BOOL WINAPI _CRT_INIT(
HANDLE hDllHandle,
DWORD dwReason,
LPVOID lpreserved
)
exe部分
C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/crt0.c的199行为exe的入口点
_declspec(noinline)
int
__tmainCRTStartup(
void
)
C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/_file.c的112行为初始化stdio的函数
int __cdecl __initstdio(void)
相关文章推荐
- Duilib vs调试程序加载资源失败,但是单独执行exe可以成功
- windows 环境下python 安装 pypcap 并用pyinstaller打包到exe,解决DLL 加载失败。
- windbg调试minidump加载mscordacwks.dll 0×80004005失败
- dll注入项目 F5调试成功但执行exe时失败
- 调试报错:其原因可能是堆被损坏,这说明**.exe中或它加载的任何DLL中有Bug
- 启动遍历文件夹中的所有指定的文件 ( 执行exe文件 或者加载dll )
- 模块已加载,但对dllregisterServer的调用失败
- VS2008突然调试程序很慢,加载 ntdll.dll,kernel32.dll 都要花一段时间
- .NET / Rotor源码分析5 - 开始使用WinDbg+SOS调试,sscoree.dll,加载SOS并设置JIT断点
- .NET / Rotor源码分析5 - 开始使用WinDbg+SOS调试,sscoree.dll,加载SOS并设置JIT断点
- WinCE 调试某手写输入法时遇到的加载手写库失败的问题
- 模块已加载,但对dllregisterServer的调用失败
- lsass.exe加载失败 系统资源不足,无法完成API
- [转]在xp下加载正常的dll,在win7下loadlibrary失败,返回错误值998(ERROR_NOACCESS)的解决办法
- Siverlight 调试DLL发现的,当前不会命中断点。还没有为该文档加载任何符号(收集)
- 附加到进程调试DLL时显示“无法命中断点,没有为该文档加载任何符号”
- 其原因可能是堆被损坏,这说明 *.exe 中或它所加载的任何 DLL 中有 Bug
- .NET / Rotor源码分析5 - 开始使用WinDbg+SOS调试,sscoree.dll,加载SOS并设置JIT断点
- vsflex8.ocx已加载,但对DLLREGISTERSERVER的调用失败
- dll加载失败问题解决