0

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

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

接受绕行功能:

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;
}

开始

我还绕道了“closesocket”,此时我想从连接列表中删除套接字。如果我在此函数上设置断点,则 IP 地址似乎已损坏。

结尾

有谁知道为什么会这样?

4

2 回答 2

0

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

由于这是 C++,因此使用std::string.

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

否则,stdcpy放入足够大的缓冲区。

顺便说一句,什么会Connection*从列表中删除所有内容?

于 2013-07-10T14:43:01.243 回答
0

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

于 2013-07-12T15:52:29.167 回答