在 Ollydbg 中列出数组(取消引用指针)

逆向工程 ollydbg
2021-07-08 12:57:39

我正在尝试解释内存的一些内容,解码 Olly 左下窗口的内容会很好(内存十六进制转储)。

一个具体的例子是 char** 数组。特别是字符 *argv[]。argv 是一个指向指针数组的指针,每个指针都是字符串的开头。在这里,我的程序有 3 个参数,因此包括在我输入 main(int argc, char *argv[]) 时使 argc=4 的路径和 exe 名称。

在下图中,我以图形方式显示了 argv=0x0041 0E80,从中我们可以看到内存中的 4 个 32 位值,每个值都是指向字符串 argv[0]、argv 1、argv[2] 和 argv[3]开头的指针(对不起红线)。

Olly 中的 hexdump 窗口(抱歉红线)

如果我选择 00410EA0 处的 4 个字节,或从 00410EA8 开始的那 16 个字节,然后在 Olly(左下象限)的这个十六进制转储窗口中右键单击,我想调出一个字符串列表。我看到有一些选项可以解码为结构和指向结构的指针,所以我认为数组和字符串数组会更简单。

任何提示?谢谢。

1个回答

在转储窗格中右键单击 -> 整数 -> 带有 ascii/unicode 转储的地址

src 、执行和下面的屏幕截图

multiargs.exe I Me You We Us Them

arg 00 = multiargs.exe
arg 01 = I
arg 02 = Me
arg 03 = You
arg 04 = We
arg 05 = Us
arg 06 = Them

ollydbg.exe multiargs.exe I Me You We Us Them

type multiargs.cpp

#include <stdio.h>
int main (int argc , char *argv[]) {
        for (int i=0;i<argc;i++){
                printf("arg %02d = %s\n",i,argv[i]);
        }
}

在此处输入图片说明