Thinker
GitHub - ThinkerYzu/CodeDecom
最近在做的 side project。給一個 python 函數,在不分析 bytecode 的情況下,分析出函數的行為。在分析出行為後,就能轉譯成其它平台和語言,甚至是將程式切割和分散。

分析方式就是把所有的參數,local 變數,global 變數,甚至是常數,全都用 mock object 取代。而 mock object 的所有 operator method 都被實作,以記錄下 function 對這些 object 做了什麼事。這些記錄就是 function 的行為了。
Thinker
遇到 branch 時,interpreter 會取得某個 mock object 的 boolean 值,這實把結果傳回 True 或 False,接著會執行下個指令。如果這一次傳回 True, 那系統重新執行這個 function,第二次則為這個 boolean 傳回 False,接著執行下一個指令時,如果和前一次是不同指令 (IP),那代表這是一個 branch。
Thinker
基本上,同一個 function 會被執行很多次,以逛遍所有的 branch, 記錄下所有的 operation 的次序。
Thinker
另外,如果有 loop 的話,每個 loop 的內部至少要連續執行兩次。以取得前一輪產生的資料,是否有餵回下一輪的行為。
Thinker
整個 project 很有平行宇宙的感覺。任何一個 branch instruction 的 True 和 False 都存在,任何一個變數都是所有的值。
mhsin
Nondeterministic Turing Machine
debɐnchery
Symbolic execution?
Thinker
debɐnchery : 和 Symbolic execution 的目的不一樣。這個 project 只會單純找出 branch,並不需要分析輸入參數的範圍圍和 branch 的關聯。
debɐnchery
原來如此
載入新的回覆