use*_*329 12 windows crash stdout writefile
这是一个使用WinAPI的WriteFile(在Microsoft Visual C++ 2008 Express中编译)的"Hello world"程序:
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t str[] = L"Hello world";
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
if(out && out!=INVALID_HANDLE_VALUE)
{
WriteFile(out, str, sizeof(str), NULL, NULL);
CloseHandle(out);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果在控制台窗口中执行,它会愉快地迎接世界.但是,如果您尝试重定向其标准输出,请参阅
hello.exe > output.txt
Run Code Online (Sandbox Code Playgroud)
程序在WriteFile中崩溃(NULL指针异常).尽管如此,output.txt仍然存在并且包含完整的正确输出.
崩溃时的调用堆栈:
KernelBase.dll!_WriteFile@20() + 0x75 bytes
kernel32.dll!_WriteFileImplementation@20() + 0x4e bytes
srgprc2.exe!wmain(int argc=1, wchar_t * * argv=0x00483d88) Line 15 + 0x16 bytes C++
Run Code Online (Sandbox Code Playgroud)
消息:"srgprc2.exe中0x75ce85ea(KernelBase.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00000000."
这里发生了什么?谢谢!
| 归档时间: |
|
| 查看次数: |
4478 次 |
| 最近记录: |