gpt4 book ai didi

c++ - 为什么这个地址在 gdb 中发生变化?

转载 作者:行者123 更新时间:2023-11-30 01:17:44 26 4
gpt4 key购买 nike

我正在使用 gdb 调试一个非常简单的汇编程序 (SPARC),但遇到了一个奇怪的问题。我正在尝试使用 gdb 将 argv 中的参数打印到我程序的主要函数中。由于某些原因,main 的第二个参数 $i1 中的地址有时会更改为指向 -1。这是我的 gdb session 的复制粘贴:

(gdb) p/x $i1
$1 = 0xffbff084
(gdb) x/x 0xffbff084
0xffbff084: 0xffbff1e4
(gdb) x/s 0xffbff1e4
0xffbff1e4: "..."
(gdb) x/x 0xffbff088
0xffbff088: 0xff
(gdb) x/x 0xffbff084
0xffbff084: 0xff

我使用了“...”而不是打印的实际路径。

我正确地打印了第一个参数,但是 gdb 没有得到第二个参数的地址,而是说下一个值为 -1。我回去再次检查第一个字符串的地址,gdb 说它也是 -1,尽管我刚刚发现它是别的东西!

这不是一个多线程程序,所以我不知道什么可以改变地址:/

编辑:似乎只发生在使用 x/s 打印地址处的内容之后。

最佳答案

gdb 'x' 命令接受打印格式和大小作为斜线后的选项。在manual它说:

Each time you specify a unit size with x, that size becomes the default unit the next time you use x.

它还说:

For the ‘s’ format, the unit size defaults to ‘b’, unless it is explicitly given.

所以发生的事情是,在您给出命令 x/s 之后,后续的 x 命令被解释为字节长度。因此它只打印您要检查的内存的第一个字节,恰好是 0xff。

尝试使用 x/xw 而不是 x/x 打印地址。

关于c++ - 为什么这个地址在 gdb 中发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com