一:背景
1. 讲故事
很多朋友可能会有疑问,C# 是一门托管语言,怎么可能会有非托管句柄泄露呢? 其实一旦 C# 程序与 C++ 语言交互之后,往往就会被后者拖入非托管泥潭,让我们这些调试者被迫探究 非托管领域问题。
二:非托管句柄泄露
1. 测试案例
为了方便讲述,我们上一个 Event 泄露的案例,使用 C# 调用 C++ ,然后让 C++ 产生 bug 导致句柄泄露。
先看一下 C++ 代码
extern "C"
{
_declspec(dllexport) void CSharpCreateEvent();
}
#include "iostream"
#include <Windows.h>
using namespace std;
void CSharpCreateEvent()
{
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
printf("\nEvent句柄值: %#08x ", hEvent);
}
然后导出一个 CSharpCreateEvent 方法给 C# 使用。
internal class Program
{
[DllImport("Example_20_1_5", CallingConvention = CallingConven
订阅专栏 解锁全文
145

被折叠的 条评论
为什么被折叠?



