如何學習JIT,能提供一些系統全面的路線和材料嗎?

請問,如何學習JIT,能提供一些系統全面的路線和材料嗎?

目前還沒有發現系統講解JIT方面的書,都是直接上paper? 和V8/Luajit 之類的代碼?

大神能否提供一條,從入門到精通的系統路線呢?

謝謝 啦 !


建議從這篇博客開始吧:

Josh Haberman: Hello, JIT World: The Joy of Simple JITs

haberman/jitdemo · GitHub

還有這篇綜述性的論文:

A Brief History of Just-In-Time

http://eecs.ucf.edu/~dcm/Teaching/COT4810-Spring2011/Literature/JustInTimeCompilation.pdf

然後讀一下這個才五百多行能跑C語言的JIT編譯器實現:

EarlGray/c4 · GitHub c4x86.c

一開始我也覺得JIT很神奇,後來恍然大悟,

不就和我曾經在自己的破爛內核里寫過的這段代碼一個意思么:

unsigned char bin[] = {
0x55,
0x89, 0xe5,
0x31, 0xc9,
0xeb, 0x04,
0xcd, 0x80,
0x89, 0xc1,
0x89, 0xc8,
0x41,
0x81, 0xf9, 0xc8, 0x00, 0x00, 0x00,
0xb8, 0x00, 0x00, 0x00, 0x00,
0x77, 0xec,
0x89, 0xc8,
0xeb, 0xe8
};

memcpy(0, bin, sizeof(bin)); // JIT need to use mmap() here
ThreadCreate(0, NULL, false);

這種手法(再結合編譯原理)用在正道上就是JIT,用在歪道上就是shellcode。

附:

X86 Opcode and Instruction Reference: coder32 edition


很久以前我本來想回答這個問題但一直拖著拖著沒碼上字。

總算碼了點字放到跟這邊相似的另一個問題下了,於是這邊就放個傳送門吧:有哪些常用 JIT 演算法? - RednaxelaFX 的回答 - 知乎

說來我在以前的博客上也發過幾篇無聊的入門文…

  • 運行時對代碼操縱的一個小demo(一) - Script Ahead, Code Behind

  • 運行時對代碼操縱的一個小demo(二) - Script Ahead, Code Behind

  • YARV和JIT,還有JRuby…… - Script Ahead, Code Behind


推薦閱讀:

早就聽聞編譯原理很難,而且很重要,寫一個編譯器算是合格,快放假了,寒假大概40天左右,能學個什麼程度?
如何寫一個簡單的編譯器?

TAG:即時編譯JIT | 編譯原理 | 編譯器 |