我有一个显示 WebBrowser 组件的应用程序,其中包含一个使用服务器创建 XMLSocket 的 flash 应用程序。我现在正在尝试为日志目的挂钩 recv (幸运的是 LocalHook),但是当我尝试读取套接字内容时,我只会得到奇怪的字符,但如果我使用 SpyStudio 设置挂钩,我会得到可读的字符串。这是我使用的代码:
我用
CreateRecvHook = LocalHook.Create( LocalHook.GetProcAddress("ws2_32.dll", "recv"), new Drecv(recv_Hooked), this); CreateRecvHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
我设置了我需要的一切
[DllImport("ws2_32.dll")] static extern int recv( IntPtr socketHandle, IntPtr buf, int count, int socketFlags ); [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] delegate int Drecv( IntPtr socketHandle, IntPtr buf, int count, int socketFlags ); static int recv_Hooked( IntPtr socketHandle, IntPtr buf, int count, int socketFlags) { byte[] test = new byte[count]; Marshal.Copy(buf, test, 0, count);
}IntPtr ptr = IntPtr.Zero; ptr = Marshal.AllocHGlobal(count); Marshal.Copy(test, 0, ptr, count); string s = System.Text.UnicodeEncoding.Unicode.GetString(test); Debug.WriteLine(s); System.IO.StreamWriter file = new System.IO.StreamWriter("log.txt"); file.WriteLine(s); file.Close(); return recv(socketHandle, buf, count, socketFlags);;
我已经尝试过使用不同的编码但没有成功。附带说明一下,WebBrowser 似乎没有任何问题。