我一直想知道用纯二进制编写代码。我意识到这是完全不切实际的,也是非常困难的。我用几种语言编写了一些,但由于某种原因,能够编写纯二进制文件的想法似乎很有趣。你能解释一下这个基础知识吗?我已经研究过,但所有答案都是"这是不实际的"即使这是显而易见的,重点是看程序员和二进制文件的限制。如果他们是一个指向IDE或教程的链接来教授其中一些,那将是非常棒的。我的观点更多的是要了解它是如何工作的,而不是制作大型程序,但能够创建一些非常基本的程序会很好。我认为制作一个非常高性能的程序会很好。
答案 0 :(得分:1)
这是可能的,但不是特别容易。
要做到这一点,通常首先用汇编语言编写代码,通常是在纸上。然后,您可以使用编码表手动汇编该数据。最后,使用调试器或“监视器”程序将二进制文件输入RAM。通常您希望在运行之前将其保存到文件中(以避免重新输入它,例如,如果它崩溃)。
但有一个主要的警告:它实际上甚至在支持某种几乎没有开销的可执行文件格式的系统上接近实用。举一个例子,在MS-DOS下,你通常使用.com文件,这几乎只是原始二进制文件。放入文件的内容将以0x100的偏移量加载,并在开始时执行。
当你使用带有PE格式可执行文件的Windows或带有ELF格式的Linux这样的东西时,这是一个完全不同的故事。我会说在这些工作中只有一半合理的方法是使用一些现有的链接器编写一个shell程序来生成可执行文件,并让它分配一些内存,从你的文件中加载代码,然后执行跳转到您的代码以开始执行。尝试用手编码PE或ELF标题是非常可怕的,温和地说。
答案 1 :(得分:0)
这是一些二进制/机器代码和相应的汇编代码:
Machine code Assembly code
03 45 84 add 0xffffff84(%ebp),%eax
83 c0 30 add $0x30, %eax
f7 e2 mul %edx
请注意,汇编指令与相应的机器代码之间存在1-1对应关系。 (指令长度不同,因为这是x86代码)。
因为二进制代码和纯汇编代码彼此映射,所以两者之间的速度没有差别。
在实践中,唯一使用十六进制编程的人是那些无法访问汇编程序的人或那些喜欢(非常)难以解决问题的人。