我知道ASM通常在汇编程序中运行,结果是或多或少地一对一地映射到最终的二进制文件,但这不是我所想的。
是否有人将ASM (或对象文件)作为一种已编写好的语言来处理,从而对其进行全面的优化?虽然这样的工具在其自身中可能并不特别有用,但它可以执行类似于来自封闭源静态库的函数内联之类的操作。
发布于 2010-12-09 04:04:28
虽然我同意旅行男孩的回答的观点,即任何这样的“编译后的程序集”语言都不再是程序集,但我必须指出,有一些‘重新编译器’,以及其源语言是机器语言(甚至不是程序集)的JIT。
这些程序需要一堆可执行代码,通常已经加载并准备执行,并对其进行转换,识别各种不同的构造,并替换为不同的版本,这些版本可以更好、更快、更安全或只是不同。
qemu就是一个例子。它的原始形式是一个CPU仿真器,它通过将给定的CPU二进制文件重新编译成不同的CPU执行程序(二进制翻译)来工作。但是,当两个CPU都相同时,它也可以工作,在这种情况下,转换允许特权代码在VM环境中通过“突破”到硬件仿真器来执行。
一个非常有趣的例子是HP (旧Ars Technica文章),一种通过重新编译HPPA-8000二进制文件实现意外加速的研究软件。
发布于 2010-12-09 03:44:51
将ASM和机器代码看作表示相同信息(指令)的两种不同形式。编译器的输出是机器代码。ASM已经(仅以人类可读的形式编写),所以编译器不会有太多的工作要做。
汇编语言有一些工具可以让您定义宏或为您注册分配,但是任何更高级的工具都将被视为编译器,其输入不再是汇编语言。
发布于 2010-12-09 03:42:30
我相信汇编语言艺术就是你想要的:http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/index.html
https://stackoverflow.com/questions/4394609
复制相似问题