0

1)首先我想知道,如何解码这些变量?

我知道这个问题的解决方案,删除优化标志,让它不稳定,我不想做所有这些。是否有任何解决方案可以在不重新编译源代码的情况下完成?问题是每当我进行任何更改时,编译都需要很长时间,所以我不想使用不同的优化标志来编译它,我也尝试过一次更改优化标志,但它只是因为编译标志的变化而崩溃,原因我想不通。

当我执行“info reg”时,我也无法找到有关理解各种寄存器的文档。我期待一些变量(我知道它的值,它会是什么)但是 info reg 向我展示了所有不同的值。我在这里遗漏了一些东西。我正在研究的架构是 x86_64

2)我想知道gdb在解码这些寄存器变量时面临哪些限制?或者这个问题已经有人解决了。我在很多地方读过汇编代码,您可以找出该寄存器中的变量。如果那是真的,为什么它不能被构建到 gdb 中。如果有解决此问题的方法,请指向相关页面

4

2 回答 2

1

如果您没有源代码并使用调试/无优化(即第 3 方代码)进行编译。您能做的最好的事情就是反汇编代码并尝试确定变量的存储方式。

在 gdb 中,该disassemble指令将转储给定函数的程序集:

disassemble <function name>

或者如果符号已被剥离

disassemble <address>

<address>函数的入口点在哪里。

您可能还必须检查调用函数的位置以确定使用的调用约定。

一旦你弄清楚了函数的结构和变量布局(堆栈变量或寄存器),在调试时,你可以通过转储寄存器或内存位置的内容来单步执行每条指令nextistepi观察变量中的值如何变化.

我自己不知道任何好的入门或教程,但这个问题及其答案可能对你有用。就我个人而言,我发现自己最常参考英特尔手册。可以从英特尔网站以 pdf 格式下载它们。我暂时没有方便的链接。如果其他人这样做,也许他们可以更新我的答案。

于 2012-10-15T15:58:57.223 回答
0

您是否看过编译未优化的代码?

gcc在您的选择中尝试其中一种:

-Og
    Optimize debugging experience. -Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience. 


-O0
    Reduce compilation time and make debugging produce the expected results. This is the default. 
于 2012-10-15T15:50:01.743 回答