如何學習JIT,能提供一些系統全面的路線和材料嗎?
請問,如何學習JIT,能提供一些系統全面的路線和材料嗎?
目前還沒有發現系統講解JIT方面的書,都是直接上paper? 和V8/Luajit 之類的代碼?大神能否提供一條,從入門到精通的系統路線呢?謝謝 啦 !
建議從這篇博客開始吧:
Josh Haberman: Hello, JIT World: The Joy of Simple JITshaberman/jitdemo · GitHub還有這篇綜述性的論文:A Brief History of Just-In-Timehttp://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天左右,能學個什麼程度?
※如何寫一個簡單的編譯器?