SMC全稱是self Modification Code,機理是,代碼運行時修改自身的代碼;用處是,爆破跳轉點,或隱藏重要代碼,防止反編譯。網上有例子,可以脫殼跟蹤試試看。
這裏講下SMC的要點:
雖然編寫自修改代碼不是一個工業標準,但有些情況下,它是比不可少的。下面的序列介紹了執行代碼修改用到的指令:
1,存儲修改的指令
2,執行dcbst指令,強制包含有修改過的指令的高速緩存行進行存儲
3,執行sync指令,確保dcbst完成
4,執行icbi指令,使將要存放修改後指令的指令高速緩存行無效
5,執行isync指令,清除所有指令的指令管道,那些指令在高速緩存行被設爲無效之前可能早已被取走
6,現在可以運行修改後的指令了。當取這個指令時,會發生指令高速緩存失敗,結果就會從存儲器中取得修改後的指令。