【发布时间】:2011-03-10 12:00:33
【问题描述】:
当我使用 LoadLibrary 加载 iphlpapi.dll 时,我的堆栈缓冲区溢出!我该如何解决 这个问题?!
typedef DWORD (*GetExtendedTcpTable)(PVOID, PDWORD, BOOL, ULONG, TCP_TABLE_CLASS, ULONG);
GetExtendedTcpTable _GetExtendedTcpTable;
// load function at runtime
HINSTANCE hstLibrary = LoadLibrary("C:\\Windows\\System32\\Iphlpapi.dll");
if(!hstLibrary)
{
::MessageBox(NULL,"Can't load Iphlpapi.dll!\n","Error",
MB_OK + MB_ICONEXCLAMATION + MB_TASKMODAL);
FreeLibrary(hstLibrary); // free memory
exit(0);
}
// load function address from dll
_GetExtendedTcpTable = (GetExtendedTcpTable)GetProcAddress(hstLibrary, "GetExtendedTcpTable");
lib 函数的加载和执行工作正常,但有时我的程序会抛出 STATUS_STACK_BUFFER_OVERRUN 异常! (某些点:当我注释字符串操作时,错误会在几行之后发生)
当我不使用 LoadLibrary 和 GetProcAddress(静态绑定)时 -> 没有缓冲区溢出!
谢谢你,
leon22
【问题讨论】:
-
库头文件中
GetExtendedTcpTable()的确切定义是什么?
标签: c++ visual-studio-2008 buffer-overflow loadlibrary getprocaddress