我使用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