gpt4 book ai didi

assembly - 从 x86 程序集创建更小的指令集

转载 作者:行者123 更新时间:2023-12-04 07:01:41 26 4
gpt4 key购买 nike

我有一种用于 x86 汇编指令的模拟器,但问题是它不接受完整的指令集。例如,如果给出一个 INT 命令,它将终止。可以在模拟器上运行命令的所有二进制表示(8 位、16 位和 32 位),并查看哪些是有效的,哪些无效。

它用于遗传编程,需要改变命令的二进制表示,但尝试在不创建无效的情况下执行此操作。

最简单的解决方案似乎只是计算它们,但是原始指令集和较小指令集之间的转换函数将如何工作?

最佳答案

如果代码段是可修改的,则为 非常很难创建翻译器,因为您需要考虑自我修改代码的可能性。任何此类翻译器都需要在生成的代码中包含其自身的副本;那时最简单的方法就是“完成”模拟器。

如果代码段不可修改,那仍然非常困难,因为在 x86 中,可以跳到一条指令的中间,并将其解释为不同的指令。因此,虽然原则上您可以为所有可能的起始地址构建一个静态转换,并构建一个大跳转表来确定您需要哪种静态转换,但这仍然不值得。

我建议不要将一般的 x86 代码转换为这个子集,而是限制 GA 生成的代码以使其适合该子集。您可以尝试使用诸如 google native client paper 中描述的技术。进一步限制代码以避免跳转到指令中间的问题。

或者,总是可以选择使用完整的 x86 仿真器而不是有限的仿真器。但是,您仍然会遇到 GA 生成非法操作码的问题。您也可以考虑使用 ISA定制设计为易于模拟而不是 x86 并模拟它。然后编译到 x86(您确实将其设计为易于编译,对吗?)当您有要保留的内容时。

这个引用似乎与你正在做的类似,你可能想看看:

  • 诺丁,彼得。 "A compiling genetic programming system that directly manipulates the machine code. "遗传编程的进展。马萨诸塞州剑桥:麻省理工学院,1994 年。311-32。打印。
  • 关于assembly - 从 x86 程序集创建更小的指令集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1738249/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com