我在学倒车。我将OllyDbg附加到一个使用WSASendTo (来自WS2_32.dll)的程序中,并中断了对WSASendTo的调用。调用时,堆栈如下所示:

根据MSDN,第二个参数是指向“WSABUF结构数组”的指针,如下所示:

因此,我的问题是:如何按照内存中的指针来查看内存中的数据?下面是内存位置0x1970F6B8 (表示从堆栈中引用的WSABUF结构)的OllyDbg视图,但从那里开始,我不知道如何将该结构放置在内存中以获取"char *buf“指针并在内存中查找其内容。

我读过,结构在内存中的布局可以依赖于编译器。如果是这样,反向工程师(或CPU)如何确定结构的内容实际存在于何处?
发布于 2014-05-08 16:31:55
如何按照内存中的指针来查看内存中的数据?
我认为您应该能够只需右键单击指针,并选择“跟随在转储”。然后,您可以在转储中选择4字节的布局,并通过相同的过程再次遵循buf指针。注意,__WSABuf结构中的第一个单词是长度,所以您需要第二个单词(在本例中,地址是0x16450370)。
我读过,结构在内存中的布局可以依赖于编译器。
是的,编译器has a certain freedom关于它如何对结构成员。
然而,ABI结构的布局必须以某种方式标准化,以确保互操作性。我不知道WinAPI是如何在其头文件中做到这一点的,也许可以使用某种特定于编译器的实用程序来控制对齐。或者他们只是假设编译器会像MSVC那样这样做。
发布于 2014-05-12 09:00:01
当WSASendTo函数中断时
select the WSABUFFER in stack Right Click Follow in dump在dump window do RightClick -> long -> Address With Ascii Dump或
Address with Unicode Dump数据将是可见的,而不必跟随。
为演示编译的代码
http://msdn.microsoft.com/en-us/library/windows/desktop/ms741693(v=vs.85).aspx
工具ollydbg 1.10
ws2_32 WSASendTo的断点
Breakpoints, item 0
Address=71AC0AAD WS2_32.WSASendTo
Module=WS2_32
Active=Always
Disassembly=MOV EDI, EDIf9将在WSASendTo上运行并中断应用程序
Log data, item 0
Message=Breakpoint at WS2_32.WSASendTo
stack as follows
0013F944 004013D7 /CALL to WSASendTo from wsasendt.004013D1
0013F948 00000068 |Socket = 68
0013F94C 0013FD84 |pBuffers = 0013FD84
0013F950 00000001 |nBuffers = 1
0013F954 0013FDAC |pBytesSent = 0013FDAC
0013F958 00000000 |Flags = 0
0013F95C 0013F970 |pTo = 0013F970
0013F960 00000010 |ToLength = 10 (16.)
0013F964 0013FF60 |pOverlapped = 0013FF60
0013F968 00000000 \Callback = NULL右键单击13f94c并在转储中跟随
默认十六进制视图
0013FD84 00 04 00 00 80 F9 13 00 DC B7 15 00 81 6C 65 00 ...€ù.Ü·.le.
0013FD94 00 00 00 00 CD 3A 35 00 02 00 6C 81 C0 A8 01 01 ....Í:5..lÀ¨
right click in dump window -> long -> address with ascii dump
0013FD84 00000400 ...
0013FD88 0013F980 €ù. ASCII "Data buffer to send"
0013FD8C 0015B7DC Ü·. ASCII "127.0.0.1"
0013FD90 00656C81 le.https://stackoverflow.com/questions/23547328
复制相似问题