0

.gdbinit 当我想以十进制格式查看“堆栈”时,我在其中定义了以下内容:

define s
   x/5gd $rsp
end

现在我可以输入如下内容:

>>> s
0x7fffffffe408: 10  8
0x7fffffffe418: 6   4
0x7fffffffe428: 2

默认情况下,它将打印 5 个 8 字节的值。如何使用输入参数来使用我传递的数字而不是 5?例如,类似:

define s(d=5)
   x/%sgd $rsp % d
end

另外,我熟悉python,所以只要我可以访问输入参数,我也可以使用它,即:

def stack():
    return "x/%sgd" % ('5' if not argv[1].isdigit() else argv[1])
4

2 回答 2

2

definegdb 中命令的参数可以通过$arg0$arg1等方式访问。参数的数量在$argc. 请注意,这$arg0是第一个参数(不是 C 命令行参数中的命令。)所以你可以写

define s
    if $argc == 0
        x/5gd $rsp
    else
        x/$arg0 $rsp
    end
end
于 2020-08-29T22:00:22.520 回答
0

你想要的是 $argc 和 $arg0 $arg1 .... 。您可以在https://sourceware.org/gdb/onlinedocs/gdb/Define.html
中找到如何实现用户定义的命令 。

于 2020-08-29T21:59:47.710 回答