Str*_*rry 1 c debugging assembly
我试图了解这段代码中发生了什么,特别是在内部__asm__.如何逐步完成汇编代码,这样我就可以打印每个变量而不是什么?
具体来说,我试图通过这个来弄清楚它的8()含义是什么,并看看它是如何知道它在索引2处进入数组的.
/* a[2] = 99 in assembly */
__asm__("\n\
movl $_a, %eax\n\
movl $99, 8(%eax)\n\
");
Run Code Online (Sandbox Code Playgroud)
该stepi命令一次遍历程序集一条指令.还有一个nexti用于逐步调用函数的函数.这些命令不符合'只有命令的唯一前缀的类型就足够了'适用于大多数命令的规则 - 部分原因是它们next和step命令完全是这些命令的前缀,部分原因是这些命令不常用,而且他们通常被知道他们真正想要使用它们的人使用.
info registers 显示很多寄存器内容.
您还需要使用该disassemble命令查看反汇编.
有关所有这些命令的更多信息可用于该help命令,例如:
(gdb) help info registers
Run Code Online (Sandbox Code Playgroud)
告诉您info registers显示整数寄存器及其内容,但它也告诉您如果提供寄存器名称,它将限制输出到该寄存器的值:
(gdb) info registers rax
rax 0x0 0
Run Code Online (Sandbox Code Playgroud)
(rax是x86_64版本eax)第一列是寄存器名称,第二列是十六进制值,第三列是整数值.
help这个disassemble命令也很有用.
请记住,gdb有许多命令的选项卡完成,这不仅可以用于简单的命令,但很多时候它会为您提供不好的建议 - 但它有时会有所帮助.
在内联汇编中包含一个标签,可以让您在开头轻松创建一个断点.
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |