只是好奇,如果打开一个十六进制编辑器并手动输入操作码并保存它。比如将 1 移到寄存器 1 将 2 移到寄存器 2 然后调用 add,这会给我工作程序吗?或者一些如何自动化这给了我蹩脚的编译器?
编辑:忘记了操作系统,我可以使用 Mac OS X 和 Linux,x86 作为 CPU。
只是好奇,如果打开一个十六进制编辑器并手动输入操作码并保存它。比如将 1 移到寄存器 1 将 2 移到寄存器 2 然后调用 add,这会给我工作程序吗?或者一些如何自动化这给了我蹩脚的编译器?
编辑:忘记了操作系统,我可以使用 Mac OS X 和 Linux,x86 作为 CPU。
正如我在评论中指出的那样,操作系统/平台在这里很重要。大多数平台都期望可执行文件具有某种结构(如果只有标头等)。例如,参见旧版本 Unix 使用的 a.out 格式。
正如您所指出的,您使用的是 Mac OS X,请查看Mach-O 格式。
请注意,键入'A0 A1'...
等不同于将实际字节(在本例中为 160/161)放入文件中。
只要您有正确的二进制文件格式,就可以。
旧的 DOS .com 文件就是这样 - 原始程序序列化到磁盘。.exe 文件和 unix ELF 文件具有结构化格式,其中包括(除其他外)重定位信息。
仅当文件是格式正确的可执行二进制文件时。例如,参见 COFF 和 ELF 格式的参考资料。
od
如果您对特定可执行文件的外观感到好奇,您还可以转储小型可执行文件的内容。