【问题标题】:Executing generated assembler inline内联执行生成的汇编程序
【发布时间】:2012-08-28 22:44:08
【问题描述】:

我正在阅读以下演示文稿: http://wingolog.org/pub/qc-2012-js-slides.pdf 其中谈到 (4,10,19) 内联 ASM 生成作为 Javascript 优化中使用的一种技术。

在以下论文中: https://sites.google.com/site/juliangamble/Home/Compilers%20Tutorial%202006-09-16.pdf?attredirects=0&d=1 在第 30 页和第 31 页,他们讨论了使用方案生成 ASM,该 ASM 随后被链接并在后续的 OS 进程中执行。

您想要生成 ASM 并在现有流程中执行它的场景如何? (即没有后续链接并在单独的步骤中执行)。

假设这归结为(例如在 C 中)生成 ASM,将字节写入内存区域(代码作为数据)并添加函数头并返回(与C 调用者(类似于我们在上面的 Goloum 论文第 3 页上看到的)。然后我们获取该数据指针并将其转换为函数指针并调用它(代码即代码 - 从代码作为数据)。

我的问题是:

(a) 这种内联代码生成和执行的术语是什么?

(b) 是否有一个简单的“hello world”C 示例可用?

【问题讨论】:

  • 我称之为即时 (JIT) 编译。许多 Scheme 实现都使用它,例如 Racket 和 Larceny。
  • 这与这个问题stackoverflow.com/questions/3073653/… 非常相似(但没有示例) - 他们称之为自我修改代码 - 我不确定我是否同意我的分类

标签: javascript assembly scheme inline-assembly dynamically-generated


【解决方案1】:

有一个很好的例子here。他们再次使用自修改代码的术语。

另一个here

Here 他们给它四个类别(用例):

  • 变质作用
  • 蹦床
  • JIT 编译
  • 安全隐患(不安全的编码/恶意软件)

有一个讨论 here 关于 LISP 是否真正的自我修改 - 他们最终得出的结论是它不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2019-05-11
    • 2017-09-15
    • 2017-04-04
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多