2013-07-10 113 views
0

我目前正試圖通過注入DLL和迂迴幾個功能添加一些功能到一個基本的服務器應用程序,我有一個存儲的IP地址一個問題讓損壞的-2級之間的呼叫。C++注入DLL乏越來越損壞

首先我繞道「接受」,並解析一些值,然後將其輸入到一個連接類,並將其添加到列表中。

接受彎路功能:

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

我也繞道 '關閉套接字' 我想從去除插座在這一點連接列表。如果我在此功能斷點,IP地址似乎已損壞。

end

有誰知道爲什麼發生這種情況?

+0

s是否已經從296變成了292? – doctorlove

回答

0

ipAddress = address;將剛纔複製的指針。如果別的東西改變了它指向的東西,你將會陷入麻煩。

由於這是C++中它可能是最安全的使用std::string

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

否則,stdcpy到足夠大的緩衝區。

BTW,什麼刪除所有從列表中Connection*

0

盡力保護您的ConnectionList等靜態/全局變量用鎖。