【发布时间】:2012-07-29 10:18:04
【问题描述】:
我想知道如何仅使用十六进制编辑器来编写像 Hello World 程序这样简单的东西。我知道我可以在接近机器级别使用汇编程序和汇编语言,但我只是想尝试在 Hello World 等玩具示例中真正编写机器代码。
这可能是一个简单的 DOS .COM 文件,我可以在 DOSBox 上运行。但是,如果有人可以提供一个 .EXE 文件的示例,以便直接在我的 Windows PC 上运行它,那就太好了。
这只是纯粹的好奇。不......我不考虑直接用二进制机器代码编写程序(我什至不经常编写汇编代码,我大多数时候只是使用 C/C++ 作为我最底层的工具)。我只是想看看是否可以这样做,因为在计算机的早期可能有人必须这样做。
附: 我知道关于这个主题有类似的问题,但没有一个提供一个有效的例子。我只想要一个简单的例子,这样它就可以帮助我理解编译器和汇编器是如何生成可执行文件的。我的意思是......过去必须有人为第一个程序手动完成此操作。此外,对于 Windows EXE 格式,肯定有人在 Microsoft 编写了第一个生成格式的工具以及 Windows 本身读取并执行它的方式。
【问题讨论】:
-
hello world 程序没有什么简单的,它是一个极其复杂和高级的话题。添加几个数字是一个简单的程序。
-
Reading/Writing machine code 的可能重复项,两者都归结为:EXE 是如何工作的?它们也太宽泛了:-)
-
@old_timer 将程序
mov eax,4 ret作为机器语言写入exe文件有多复杂?它可以很容易地为 ELF 完成(使用模板),为什么不是 EXE? -
将一些机器代码写入任何二进制格式文件是微不足道的,您只需查找二进制格式,检查其他工具制作的一些示例以验证格式文档,然后从头开始或调整。但是带有 printf 的 hello world 程序背后有大量代码,可以看到代码出现在窗口上。是的,您可以确定一些系统调用并将其简化为带有字符串的循环
-
如果我没记错的话,.exe 比 elf 和 elf 文件简单得多(简单到不需要库)。 .com 更简单...
标签: windows exe executable machine-code