gpt4 book ai didi

c - 如何使用 GDB Debugger 查看 __asm__ 内容?

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:08 25 4
gpt4 key购买 nike

我试图理解这段代码中发生了什么,特别是在 __asm__ 中。我如何单步执行汇编代码,以便打印每个变量以及不打印什么?

具体来说,我试图逐步解决这个问题,以弄清楚 8() 是什么意思,并了解它如何知道它会进入索引 2 处的数组。

 /* a[2] = 99 in assembly */
__asm__("\n\
movl $_a, %eax\n\
movl $99, 8(%eax)\n\
");

最佳答案

stepi 命令一次通过汇编一条指令。还有一个用于单步执行函数调用的 nexti。这些命令不遵守适用于大多数命令的“仅键入命令的唯一前缀就足够”的规则——部分原因是它们 nextstep 命令是完全是这些命令的前缀,部分是因为它们不经常使用,当它们被使用时,它们通常被知道他们真的想使用它们的人使用。

info registers 显示很多寄存器内容。

您还需要使用 disassemble 命令查看反汇编。

有关所有这些命令的更多信息可通过 help 命令获得,例如:

(gdb) help info registers

告诉您 info registers 显示整数寄存器及其内容,但它还告诉您,如果您提供寄存器名称,它将把输出限制为该寄存器的值:

(gdb) info registers rax
rax 0x0 0

(raxeax 的 x86_64 版本)第一列是寄存器名称,第二列是十六进制值,第三列是整数值。

disassemble 命令也有有用的帮助

请记住,gdb 为许多命令提供了制表符补全功能,这不仅可以用于简单的命令,尽管很多时候它会为您提供不好的建议——不过有时它很有用。

在内联程序集中包含一个标签将使您可以轻松地在它的开头创建一个断点。

关于c - 如何使用 GDB Debugger 查看 __asm__ 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546331/

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