6

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

它告诉我mov ebx, 1739EBX 中的结果是 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
4

1 回答 1

0

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

从表面上看(界面),这可能看起来有效,但它可能只是在拼凑,不能完全重新生成应用程序。

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

于 2016-11-17T05:30:56.217 回答