v8学习笔记(七) 执行过程
v8執行過程
???????? JS源碼經過v8編譯后得到Handle<Script>,調用API Script的Run()運行。
???????? (1)由API進入v8內部,取到JSFunction對象: API Handle<Script>轉換為Handle<JSFunction>,得到JSFunction對象
???????? (2)通過(動態)內建JSEntry Code對象的入口函數調用目標機器指令:
?????????????????? 通過JSEntryStub獲得內建的JSEntry Code對象(含有內建入口函數的機器指令),再得到其JS入口函數地址(第一條機器指令的地址) , 調用入口函數 , 同時將(JS源碼編譯后生成的)JSFunction中的Code對象的入口函數地址作為參數.
???? JSEntryFunction entry = FUNCTION_CAST<JSEntryFunction>(code->entry());//內建入口函數地址
??? // Call the function through the right JS entry stub.
?? ? byte* entry_address = func->code()->entry();
??? JSFunction* function = *func;
??? Object* receiver_pointer = *receiver;
???? //跳到運行時動態產生的JS入口函數機器指令處執行,隨后跳到動態產生的目標機器指令處
??? entry(entry_address, function,receiver_pointer, argc, args);
總結
以上是生活随笔為你收集整理的v8学习笔记(七) 执行过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: v8学习笔记(六) 汇编过程
- 下一篇: DLL劫持的发展历程