在研究反编译的过程中(PB反编译大师从这里下载),发现PB 12.1 6875编译的一个文件,本意要实现如下代码
参数:encoding e
string s
long len
choose case e
case encodingansi!
s = "xxxx"
case encodingutf8!
s = "xxxx"
case else
s = "not support"
end choose
return s
在第三个case分支是,操作码应该是
get_var(s) //第三个case(case else)
get_string("not support") //第三个case
convert_string("not support") //第三个case
Assign_string(s = "not support") //第三个case
get_var(s) //返回语句
convert_string(s) //返回语句
return_var(s) //返回语句
但是实际反编译发现,编译出的pbd中的代码有丢失和错乱,具体为:
get_string("not support") //第三个case
get_var(s) //返回语句
convert_string(s) //返回语句
return_var(s) //返回语句
其错误在于丢失第三个分支,而且仅仅剩下get_string("not support") 一个操作码
这个导致运行时错误或者崩溃. 这个文件样本来自国外一个很出名的PB编写的软件。
过去的分析,也发现其他的版本中存在这样的低概率的莫名的错误。