SMC全称是self Modification Code,机理是,代码运行时修改自身的代码;用处是,爆破跳转点,或隐藏重要代码,防止反编译。网上有例子,可以脱壳跟踪试试看。
这里讲下SMC的要点:
虽然编写自修改代码不是一个工业标准,但有些情况下,它是比不可少的。下面的序列介绍了执行代码修改用到的指令:
1,存储修改的指令
2,执行dcbst指令,强制包含有修改过的指令的高速缓存行进行存储
3,执行sync指令,确保dcbst完成
4,执行icbi指令,使将要存放修改后指令的指令高速缓存行无效
5,执行isync指令,清除所有指令的指令管道,那些指令在高速缓存行被设为无效之前可能早已被取走
6,现在可以运行修改后的指令了。当取这个指令时,会发生指令高速缓存失败,结果就会从存储器中取得修改后的指令。