【发布时间】:2014-02-08 08:52:27
【问题描述】:
我依靠GetProcAddress() 来挂钩某些功能。不过我得到了一个糟糕的结果,老实说,我真的不知道发生了什么。
看来这段代码会输出"WHAT THE HELL?":
int main(void)
{
HMODULE ws32 = LoadLibrary("WS2_32.DLL");
if (GetProcAddress(ws32, "ntohl") == GetProcAddress(ws32, "htonl"))
printf("WHAT THE HELL\n");
return 0;
}
谁能解释一下为什么 ntohl 和 htonl 有相同的绝对地址?
问题是,当我连接到一个 DLL 并在 DLL 内部进行一些处理时,很明显在 PE 导入表内部(我解析 PE IAT),ntohl() 和 htonl() 具有不同的地址(在 IAT 内部为说)。
所以这件事让我的程序毫无用处。 ntohl() 与htonl() 混淆,程序无法发挥作用而发疯。
有什么想法吗?有没有办法规避这种情况?解释?
【问题讨论】:
标签: windows dll winsock winsock2 portable-executable