首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以下结构指针

以下结构指针
EN

Stack Overflow用户
提问于 2014-05-08 16:23:55
回答 2查看 538关注 0票数 1

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

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

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

我读过,结构在内存中的布局可以依赖于编译器。如果是这样,反向工程师(或CPU)如何确定结构的内容实际存在于何处?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-08 16:31:55

如何按照内存中的指针来查看内存中的数据?

我认为您应该能够只需右键单击指针,并选择“跟随在转储”。然后,您可以在转储中选择4字节的布局,并通过相同的过程再次遵循buf指针。注意,__WSABuf结构中的第一个单词是长度,所以您需要第二个单词(在本例中,地址是0x16450370)。

我读过,结构在内存中的布局可以依赖于编译器。

是的,编译器has a certain freedom关于它如何对结构成员。

然而,ABI结构的布局必须以某种方式标准化,以确保互操作性。我不知道WinAPI是如何在其头文件中做到这一点的,也许可以使用某种特定于编译器的实用程序来控制对齐。或者他们只是假设编译器会像MSVC那样这样做。

票数 2
EN

Stack Overflow用户

发布于 2014-05-12 09:00:01

当WSASendTo函数中断时

代码语言:javascript
复制
select the WSABUFFER in stack Right Click Follow in dump

dump window do RightClick -> long -> Address With Ascii Dump

代码语言:javascript
复制
Address with Unicode Dump

数据将是可见的,而不必跟随。

为演示编译的代码

http://msdn.microsoft.com/en-us/library/windows/desktop/ms741693(v=vs.85).aspx

工具ollydbg 1.10

ws2_32 WSASendTo的断点

代码语言:javascript
复制
Breakpoints, item 0
 Address=71AC0AAD WS2_32.WSASendTo
 Module=WS2_32
 Active=Always
 Disassembly=MOV     EDI, EDI

f9将在WSASendTo上运行并中断应用程序

代码语言:javascript
复制
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并在转储中跟随

默认十六进制视图

代码语言:javascript
复制
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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23547328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档