c - 遵循结构指针

标签 c assembly reverse-engineering ollydbg

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

stack layout

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

pointer to WSABUF struct

所以我的问题是:如何根据内存中的指针查看内存中的数据?下面是 OllyDbg 中内存位置 0x1970F6B8 的 View (代表从堆栈引用的 WSABUF 结构),但从那以后,我不知道这个结构是如何在内存中布局以获取“char FAR *buf”指针并在内存中查找其内容。

memory layout

我读到内存中结构的布局可以依赖于编译器。如果是这样,逆向工程师(或 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/

相关文章:

assembly - SP(堆栈指针)反调试技巧 - x86

c - EOF 在...EOF 之前到达

c - 为什么 stat 返回错误结果?

C printf 与汇编代码混合时出现段错误(核心已转储)

c++ - ARM vector 表指向后一个字节

javascript - 给定此哈希函数、预期输出和输入字符串的长度,我如何找到返回给定结果的输入字符串?

python - 源不可用时调试python字节码

c - int c = getchar()?

使用ascii在C中大写字母

assembly - 如何减少阶乘循环的执行时间和周期数?和/或代码大小?