【问题标题】:Debug a flat assembly binary调试平面程序集二进制文件
【发布时间】:2015-10-29 19:14:11
【问题描述】:

我是汇编和低级编程的新手 我在 windows xp 中使用 FASM。当我组装下面的代码时,它会给我一个 .bin 文件。

data1 db 25
data2 db 10001001b
data3 db 12h
      org 0x10
data4 db '2367'
      org 0x18
data5 db ?
      org 0x20
data6 db 'Hello there'

我正在学习的书是使用 windows 调试命令来查看每个命令的值和地址,但是当我使用调试时它会显示其他内容

我的问题是有没有可以调试这些文件的应用程序?甚至引导加载程序程序集二进制文件?

【问题讨论】:

  • Ndisasm 会尝试反汇编它...但我认为您不会发现它有用。什么。如果有的话,这段代码应该做什么?
  • 这只是一个测试。我正在学习汇编,我只是想看看它是如何存储数据的
  • 也许是“hiew”或“biew”(我想他们现在称之为“再见”)。 DEBUG 的“d”命令也应该这样做。或者......编写自己的 hexdump 例程并不难。我认为您不想真正“调试”或“反汇编”它。引导加载程序,您可能需要反汇编。它可能不会很好地“调试” - 加载到错误的地址......
  • 谢谢,但我需要一个免费的应用程序 hiew 和 biew 不是免费的 有没有什么方法可以使用 ollydbg 来反汇编一个 16 位的程序集应用程序?

标签: assembly x86


【解决方案1】:

使用 'org' 指令将变量放在特定位置在 MASM 中有效,但在 FASM 或 NASM 中无效。

对于 FASM 和 NASM,您必须这样做:

data1 db 25                       // 0x00
data2 db 10001001b                // 0x01
data3 db 12h                      // 0x02
      times 0x10 - ($-$$) db 0
data4 db '2367'                   // 0x10
      times 0x18 - ($-$$) db 0
data5 db '?'                      // 0x18
      times 0x20 - ($-$$) db 0
data6 db 'Hello there'            // 0x20

然后您可以组装成一个平面二进制文件并使用 hexdump 检查结果:

00000000  19 89 12 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  32 33 36 37 00 00 00 00  3f 00 00 00 00 00 00 00  |2367....?.......|
00000020  48 65 6c 6c 6f 20 74 68  65 72 65                 |Hello there|

您应该阅读 FASM 手册的 2.2.32.2.4 部分。

【讨论】:

  • 非常感谢安托万。效果很好 我可以将此方法用于使用 NASM 组装的完整引导加载程序吗?
猜你喜欢
  • 2010-10-13
  • 2010-11-19
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多