英特尔汇编找不到 Argv 地址



我不知道这是否是一个宽泛的问题,但我很难找到参数向量字符串。这是我的GDB输出。

(gdb) run test
Starting program: /root/Desktop/booksrc/a.out test
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
Breakpoint 1, main (argc=2, argv=0x7fffffffe468) at convert2.c:14
14      count = atoi(argv[2]); // convert the 2nd arg into an integer
(gdb) x/3xw 0x7fffffffe468
0x7fffffffe468: 0xffffe6d2  0x00007fff  0xffffe6ee
(gdb) x/3xw 0xffffe6d2
0xffffe6d2: Cannot access memory at address 0xffffe6d2
(gdb) x/3xw 0x00007fff
0x7fff: Cannot access memory at address 0x7fff

因此,应该是我的第一个参数,/root/Desktop/booksrc/a.out是不可访问的,以及测试参数。什么东西?

您必须在命令中使用g而不是wg代表"巨大"或8字节,因为你在64位机器上,而不是x/3xw,你想要x/3xg,你会得到这样的东西:

(gdb) x/3xg 0x7fff5fbff900
0x7fff5fbff900: 0x00007fff5fbffa38  0x00007fff5fbffa6a
0x7fff5fbff910: 0x0000000000000000

然后是x/s 0x00007fff5fbffa38,您将看到argv参数,它是程序的路径,第二个0x00007fff5fbffa6a将是"test"。

最新更新