gpt4 book ai didi

c - 汇编中参数的 GDB 字符集

转载 作者:行者123 更新时间:2023-11-30 17:57:27 25 4
gpt4 key购买 nike

我在 GDB 和 sscanf 函数内部进行了反汇编,得到:

    at vfscanf.c:603
_IO_vsscanf (string=string@entry=0x804b760 "1 \\233 200",
format=format@entry=0x804a21e "%d %c %d",
args=args@entry=0xbffff0a8 "\304\360\377\277\277\360\377\277\300\360\377\277\224\361\377\277\310\360\377\277\201\222\004\\\351") at iovsscanf.c:47

我正在尝试获取 args 中的信息,但我不确定如何将该字符串转换为可读的内容。我真正想要获取的是 sscanf 保存到的地址。我假设这些地址在此字符串中表示。这是我在查找字符集时得到的结果:

(gdb) show charset
The host character set is "auto; currently ANSI_X3.4-1968".
The target character set is "auto; currently ANSI_X3.4-1968".
The target wide character set is "auto; currently UTF-32".

我使用的是 Linux,IA-32。

最佳答案

echo $'\304\360\377\277\277\360\377\277\300\360\377\277\224\361\377\277\310\360\377\277\201\222\004\\\351'|od -t x4  

0000000 bffff0c4 bffff0bf bffff0c0 bffff194
0000020 bffff0c8 5c049281 00000ae9
0000032

然后您可以通过以下方式检查内容:

print *(int*)(0xbffff0c4)

或者使用 gdb 的内部 printf 命令

printf "%s\n", 0xbffff0bf

或者甚至在调试下的程序中调用 printf(如果已链接)

call printf("%8.3f\n",*(float*)(0xbffff194))

同样,直接使用字符串(我将使用 argv[0]):

print argv[0]
"/home/asu..."
// assuming "/hom" was a proper address...
print **(int**)(argv[0]+0)
// assuming "e/as" was a proper address...
print **(int**)(argv[0]+4)

关于c - 汇编中参数的 GDB 字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811597/

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