我知道这可能看起来很奇怪并且在寻找麻烦,但我认为体验古代程序员之前所经历的是有趣的事情。那么我怎样才能执行只用二进制编写的程序呢? (假设我知道我在做什么,当然不使用汇编。)
我只想写一些像111010111010101010101
这样的位并执行它。那我怎么能这样做呢?
答案 0 :(得分:45)
使用十六进制编辑器。当然,您需要找到适用于您的操作系统的相关可执行格式 - 假设您要使用操作系统...我想您总是可以编写自己的引导加载程序并运行如果你想获得所有核心话,那就直接代码。
我不认为你真的正在经历那些程序员当时经历过的事情 - 一方面,你不会使用穿孔卡,纸带等。另一方面,你的背景是完全不同的 - 你知道什么样的计算机现在,,所以它会给你带来痛苦的原始感觉......然而,那时候,它本来就是尖锐的,令人兴奋的只是在这些理由上。
答案 1 :(得分:17)
使用十六进制编辑器,编写您的位并将其保存为可执行文件(在Windows中仅使用文件扩展名.exe
或在Linux中使用chmod a+x filename
)。
问题是:您还必须以二进制格式编写所有特定于操作系统的内容,并且您必须拥有一个从汇编代码转换为二进制代码的表。
为什么不,如果你想体验低级编程,请给D.E. Knuth的汇编程序MMIX试一试?
答案 2 :(得分:9)
这实际上取决于您使用的平台。但根据你提出的目的,这有点无关紧要。现代计算机中最早的程序员就像你想到的那样在二进制文件中做了 not 程序 - 他们用汇编编程。
使用十六进制编辑器,您将不会学习使用二进制编写特定操作系统和特定CPU类型的任何内容。
如果您想了解预装配程序员的工作方式(使用纯二进制数据),请查看Punch Cards。
答案 3 :(得分:6)
使用十六进制编辑器创建文件,请务必使用相应操作系统的加载程序理解的格式,然后双击它。
答案 4 :(得分:4)
大多数汇编程序(例如MMIX汇编程序见www.mmix.cs.hm.edu)不关心
你写指令或数据。
所以而不是wirting
Main ADD $0,$0,3 SUB $1,$0,4 ...
你可以写
Main TETRA #21000003 TETRA #25010004 ...
因此,您可以手动组装程序,然后让汇编程序以加载程序所需的形式对其进行转换。然后你执行它。 Normaly你使用hex notatition而不是二进制,因为很难跟踪这么多数字。您也可以使用十进制,但是图表会告诉您哪些指令通常采用十六进制表示法。
祝你好运!当我开始编程计算机时,我不得不做这样的事情。每个人都很高兴有一个汇编程序甚至编译器。 马丁答案 5 :(得分:2)
或者他只是在写一些恶意代码。 我已经看到一些有趣的方法,使用AVR作为键盘模拟器,打开一些简单的文本编辑器,编写AVR eeprom内存中的代码,并将其管道“调试”(在Windows系统中),然后运行它。这也是逃避某些限制的好方法;)
答案 6 :(得分:2)
我想通过直接与硬件交互,您可以用二进制编写。要翻转正确的二进制位,可以在磁盘驱动器上使用磁化针。或蝴蝶。