Thinker
@Thinker
說
Mon, Aug 8, 2022 5:47 AM
6
GitHub - ThinkerYzu/CodeDecom
最近在做的 side project。給一個 python 函數,在不分析 bytecode 的情況下,分析出函數的行為。在分析出行為後,就能轉譯成其它平台和語言,甚至是將程式切割和分散。
分析方式就是把所有的參數,local 變數,global 變數,甚至是常數,全都用 mock object 取代。而 mock object 的所有 operator method 都被實作,以記錄下 function 對這些 object 做了什麼事。這些記錄就是 function 的行為了。
Thinker
@Thinker
說
Mon, Aug 8, 2022 5:51 AM
遇到 branch 時,interpreter 會取得某個 mock object 的 boolean 值,這實把結果傳回 True 或 False,接著會執行下個指令。如果這一次傳回 True, 那系統重新執行這個 function,第二次則為這個 boolean 傳回 False,接著執行下一個指令時,如果和前一次是不同指令 (IP),那代表這是一個 branch。
Thinker
@Thinker
說
Mon, Aug 8, 2022 5:54 AM
基本上,同一個 function 會被執行很多次,以逛遍所有的 branch, 記錄下所有的 operation 的次序。
Thinker
@Thinker
說
Mon, Aug 8, 2022 5:56 AM
另外,如果有 loop 的話,每個 loop 的內部至少要連續執行兩次。以取得前一輪產生的資料,是否有餵回下一輪的行為。
Thinker
@Thinker
說
Mon, Aug 8, 2022 5:59 AM
整個 project 很有平行宇宙的感覺。任何一個 branch instruction 的 True 和 False 都存在,任何一個變數都是所有的值。
mhsin
@mhsin
Mon, Aug 8, 2022 6:14 AM
Nondeterministic Turing Machine
debɐnchery
@xatierlike
Mon, Aug 8, 2022 8:02 AM
Symbolic execution?
Thinker
@Thinker
說
Mon, Aug 8, 2022 3:49 PM
debɐnchery
: 和 Symbolic execution 的目的不一樣。這個 project 只會單純找出 branch,並不需要分析輸入參數的範圍圍和 branch 的關聯。
debɐnchery
@xatierlike
Mon, Aug 8, 2022 7:05 PM
原來如此
載入新的回覆
分析方式就是把所有的參數,local 變數,global 變數,甚至是常數,全都用 mock object 取代。而 mock object 的所有 operator method 都被實作,以記錄下 function 對這些 object 做了什麼事。這些記錄就是 function 的行為了。
Nondeterministic Turing Machine