【问题标题】:Examine assembly program using GDB使用 GDB 检查汇编程序
【发布时间】:2015-10-05 05:44:43
【问题描述】:

我对汇编很陌生 - 我们上周在课堂上学会了如何阅读它。我正在处理 pset 并卡住了。 pset 的目的是能够弄清楚每个阶段的汇编代码在做什么,并为程序提供正确的输入,使其不会失败。我想出了第一阶段,但我只是不确定如何接近第二阶段。以下只是代码的一部分,但对我正在查看的内容有所了解。

<redacted>

“引爆炸弹”导致程序失败。现在我在调用“爆炸炸弹”之前设置断点,在调用“read_six_numbers”之前,并使用 info register & stepi 以及 print 语句来尝试查看程序这一部分的正确输入是什么。但是,我真的不确定如何解决这个问题。使用 info register 不会给出任何 6 个数字的序列,我真的不确定这是否是我应该寻找的。​​p>

由于这是一个 pset,我将在提交它时将此链接添加到我的 pset 自述文件中,我非常感谢对直接解决方案的解释,因为在这部分之后还有更多阶段我必须解决并被介绍给使用 gdb 解决此类问题的技术将非常非常有用。

【问题讨论】:

  • 查看 gdb x(检查)命令。这将允许您提前查看给定数量的值。例如x/8x 0x400500 将允许您查看从内存地址0x400500 开始的接下来的8 个十六进制值。除此之外,您似乎使用的是正确的工具。
  • 感谢您指出这一点!我肯定会更深入地研究它。我已经查看了一些代码,并考虑了我希望 GDB 停止查看值的不同位置,尤其是在比较点处,因为我可能会暴露程序期望的值。

标签: assembly gdb


【解决方案1】:

我最终弄明白了——这部分的关键是设置多个断点或使用 si 来确定程序是如何运行的。我不会发布直接答案,因为这可能违反校规,但逐步完成程序对于找出正确的输入至关重要。

感谢 David 教我有关 x GDB 命令的知识 - 它们对此非常非常有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多