我不知道这是否是一个宽泛的问题,但我很难找到参数向量字符串。这是我的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
而不是w
。g
代表"巨大"或8字节,因为你在64位机器上,而不是x/3xw
,你想要x/3xg
,你会得到这样的东西:
(gdb) x/3xg 0x7fff5fbff900
0x7fff5fbff900: 0x00007fff5fbffa38 0x00007fff5fbffa6a
0x7fff5fbff910: 0x0000000000000000
然后是x/s 0x00007fff5fbffa38
,您将看到argv参数,它是程序的路径,第二个0x00007fff5fbffa6a
将是"test"。