我正在学习倒车。我已将 OllyDbg 附加到一个使用 WSASendTo(来自 WS2_32.dll)的程序,并在调用 WSASendTo 时中断。调用时,堆栈如下所示:
根据 MSDN,第二个参数是指向“WSABUF 结构数组”的指针,如下所示:
所以我的问题是:如何根据内存中的指针查看内存中的数据?下面是 OllyDbg 中内存位置 0x1970F6B8 的 View (代表从堆栈引用的 WSABUF 结构),但从那以后,我不知道这个结构是如何在内存中布局以获取“char FAR *buf”指针并在内存中查找其内容。
我读到内存中结构的布局可以依赖于编译器。如果是这样,逆向工程师(或 CPU)如何确定结构的内容实际存在于何处?
最佳答案
how do I follow the pointers in memory to see the data in memory?
我认为您应该只需右键单击指针并选择“Follow in Dump”即可。
然后您可以在转储中选择 4 字节布局,并通过相同的过程再次跟随 buf
指针。请注意,__WSABuf
结构中的第一个单词是长度,因此您需要第二个单词(在本例中,地址为 0x16450370)。
I've read that the layout of a struct in memory can be compiler-dependent.
是的,编译器has a certain freedom关于它如何对齐结构成员。
但是,ABI 结构的布局必须以某种方式标准化,以确保互操作性。我不知道 WinAPI 在它们的头文件中是如何做到这一点的,也许是使用某种特定于编译器的编译指示来控制对齐。或者他们可能只是假设编译器会像 MSVC 那样做。
关于c - 遵循结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23547328/