在 gdb 间接解析内存地址

Resolving memory address in gdb indirection

在使用 -g 编译以在程序中获取调试信息并在 gdb 中使用 运行 进行编译后,我可以执行以下操作来打印参数向量:

>>> p __libc_argv
 = (char **) 0x7fffffffe9f8
>>> p __libc_argv[0]
 = 0x7fffffffec63 "./sample.out"

我的问题有两个:

__libc_argv 是指向指针数组的指针。 __libc_argv[0] 是该数组第一个元素的内容。没有理由认为它们应该相同,除非您出于某种原因首先 __libc_argv[0] = __libc_argv 。但这不合理,因为 __libc_argv 的元素应该是指向字符串的指针,而不是指向数组的指针。

另一方面,__libc_argv == &__libc_argv[0]*__libc_argv == __libc_argv[0]

要得到你想要的地址,直接通过__libc_argv即可。

>>> x/s *__libc_argv