【问题标题】:Insight debugger shows wrong values in registersInsight 调试器在寄存器中显示错误值
【发布时间】:2017-03-31 12:20:23
【问题描述】:

我在我的 64 位 Mac-to-Linux 计算机上使用 Insight 调试器。

它告诉我mov ebx, 1739 的结果是 EBX 中的 0xcc00cccb。 EAX 按预期得到 0x1bf,但乘法结果也很奇怪(当它应该适合 32 位寄存器时)。

global  _start          

_start:

nop     

    mov eax, 447
    mov ebx, 1739
    mul ebx

nop 

请有人告诉我发生了什么事。我什至不能声明一个数据字节字符串,除非它在高阶半字节处添加几个 c 到任何 mov 或 mul 指令产生的任何十六进制,无论哪个寄存器首先声明。我使用 NASM 汇编器。

编辑:我要组装和链接的两个终端条目是:

nasm -f elf -g -F stabs test.asm -l test.lst
ld -o test test.o -melf_i386

【问题讨论】:

  • mul之后的结果是什么?
  • eax 将其值更改为 0x35659675,edx 从 0x0 变为 0x164,并且 eflags 也更改了,但我只是假设这是进位标志。
  • 你是编译成 64 位程序还是 32 位程序?
  • 我的两个终端条目是:nasm -f elf -g -F stabs test.asm -l test.lst ....和.... ld -o test test.o -melf_i386
  • 我让它运行起来了。你是绝对正确的。它是 Insight 调试器。 GDB 说 ebx 寄存器是 0x6cb 等于 1739。非常感谢!如果DDD比GDB更容易我会得到(我更喜欢有一个方便导航的界面)

标签: assembly nasm insight


【解决方案1】:

对于可能运行 Ubuntu 16.04 LTS 的任何人来说,如果您尝试通过博客文章中建议的方法“取回”已从该 Ubuntu 的默认应用程序集中删除的 Insight : http://www.dalfonso.co/blog/2016/04/23/setting-insight-debugger-on-ubuntu-16-04-lts/,你实际上不会得到你想要的应用程序。它有缺失的部分。

从表面上看(界面),这似乎可行,但它可能只是拼凑,无法完全重新生成应用程序。

真正的原因与我的计算机某处的内部故障有关,如果保存程序集文件的文件夹名称被命名为“程序集”,则由于未知原因,无法将值正确分配给寄存器。

【讨论】:

  • 我这里有一个 Ubuntu 16.04 LTS 系统。我完全按照该网页上的说明进行操作,当我在可执行文件上运行 insight 并逐步执行程序时,寄存器具有正确的值,并且 MUL 具有正确的结果。
  • 那么为什么我会从 Insight 而不是 GDB 那里得到如此奇怪的回应呢?您是否按照我的方式组装和链接 .asm 文件?
  • 是否建议通过屏幕共享执行此操作?我很乐意与您分享我的屏幕。如果这样的提议违反规则,请提前道歉。
  • 当我这样做时,我将其组装并链接到我建立洞察力的目录之外的可执行文件。当你完成构建isight 时,你做了sudo make install 吗? .您可能希望做的其他事情是确保您正在调试的程序位于当前目录中。例如,最好执行isight ./test 强制isight 在当前目录中使用程序test,而不是可能使用/usr/bin/test 中定义的系统。
  • 您不需要从存储库所在的目录运行它。在我的系统上,我将您的代码放在一个完全不同的文件夹中,组装它并链接它,并且可执行文件不在存储库文件夹中。所以我觉得你还是做错了。
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2022-06-22
相关资源
最近更新 更多