Executing generated assembler inline

江枫思渺然 提交于 2019-12-24 01:23:52

问题


I was reading the following presentation: http://wingolog.org/pub/qc-2012-js-slides.pdf which talks about (4,10,19) inline ASM generation as a technique used in Javascript optimisation.

In the following paper: https://sites.google.com/site/juliangamble/Home/Compilers%20Tutorial%202006-09-16.pdf?attredirects=0&d=1 at page 30 and 31 they talk about using scheme to generate ASM that is subsequently linked and executed in a subsequent OS process.

What about the scenario where you want to generate the ASM and execute it inside your existing process? (ie no subsequent link and execute in separate steps).

I assume this comes down to (in C for example) generating the ASM, writing the bytes to an area of memory (code as data) and adding a function header and return (compatible with a C caller (similar to what we see on page 3 of the Goloum paper above). Then we take that data pointer and convert it to a function pointer and call it (code as code - from code as data).

My questions are:

(a) What is the terminology for this inline code generation and execution?

(b) Is there a simple 'hello world' C example of this available?


回答1:


There is quite a good example here. Again they use the terminology of self-modifying code.

Another one here.

Here they give it four categories (use cases):

  • Metamorphism
  • Trampolining
  • JIT compilation
  • Security implications (insecure coding/malware)

There is a discussion here about whether LISP is truly self-modifying - and they end up concluding that it is not.



来源:https://stackoverflow.com/questions/12168575/executing-generated-assembler-inline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!