我使用Nektra的Deviare來掛接winsock的發送方法調用。我的理念是學會通過與原始應用程序相同的套接字發送消息。所以當我檢測到第一個發送消息的調用時,我保存了套接字ID(發送函數的第一個參數),所以我可以稍後使用它。發送帶有套接字的字符串(不那麼容易!)
因此,這裏是我的代碼:
uint socket = 0;
[DllImport("Ws2_32.dll")]
private static extern int send(uint socket, string buf, int len, int flags);
void _proxy_OnFunctionCalled(DeviareTools.IProcess proc, DeviareParams.ICallInfo callInfo, Deviare.IRemoteCall rCall)
{
socket = (uint)callInfo.Params.get_Item(0).Value;
}
後來
int ret = send(socket, "ABC", 3, 0);
MessageBox.Show(ret.ToString());
這最後一個消息框總是坡平了-1。爲什麼要這樣呢?
感謝
編輯:調用WSAGetLastError()返回2.我不知道這意味着什麼,因爲它似乎並沒有出現在MSDN上。
它現在有一些價值,1564。 – 2009-08-20 19:40:48
嗯,我設置套接字值爲123,它彈出相同的錯誤。奇怪。所以也許它與套接字ID無效有關?我不明白爲什麼。 – 2009-08-20 19:43:23