c ++注入的DLL变量已损坏

时间:2013-07-10 14:01:36

标签: c++ corruption dll-injection detours

我正在尝试通过注入DLL并绕过几个函数来为基本服务器应用程序添加一些功能,并且我遇到了存储的IP地址在2次调用之间损坏的问题。

首先,我绕道'接受'并解析一些值然后将它们输入连接类并将其添加到列表中。

接受绕行功能:

std::list<Connection*> ConnectionsList;
SOCKET WINAPI MyAccept(SOCKET s, sockaddr *addr, int *addrlen)
{
    ...  
    ConnectionsList.push_back(new Connection(ClientSocket, ipstr));
    ...
}

连接类:

SOCKET s;
char * ipAddress;
char * playerName;
Connection::Connection(SOCKET sock, char * address)
{
    s = sock;
    ipAddress = address;
}

start

我还绕道'closesocket',此时我想从连接列表中删除套接字。如果我在此功能上断点,则IP地址似乎已损坏。

end

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

ipAddress = address;只会复制指针。如果其他东西改变了它指向的东西,你就会遇到麻烦。

由于这是C ++,因此使用std::string可能是最安全的。

std::string ipAdreess;
...
ipAddress = address;

否则,stdcpy进入一个足够大的缓冲区。

BTW,从列表中删除所有Connection*的内容是什么?

答案 1 :(得分:0)

尝试使用锁保护您的ConnectionList等静态/全局变量。