在逆向中,ida是經常使用到的工具,在ida中使用最頻繁的就是f5了,能夠讓我們看到偽c**,但有時會看到如下語句。
a1 = ( ((v48 * v34)+ (((((v19 * (v2 * v14)) * v34)+ ((v44 * v34)+ ((((v40 * v35)+ ((v35 * v39)+ ((((v32 * v35) + ((v10 * v28) + ((((v10 * v25) + ((v23 * v10) + ((((v9 * ((v2 * v14) * v11 )) + ((((v8 * v9) - (v9 * v12)) - (v9 * v17)) + (v9 * v19))) - (v9 * v20)) - (v22 * v10)))) - (v10 * v26)) - (v10 * v27))))- (v36 * v35))- (v38 * v35))))- (v35 * v41))- (v42 * v34))))- (v46 * v34))- (v47 * v34)))
這時候想理解句子的意思就比較難了,主要問題在於不知道表示式中的小括號是否影響到運算的優先順序,以前比較老實,在不影響運算優先順序的情況下,手動刪除一對對無效的括號。能不能像辦法用**的方式解決呢,這時候編譯原理就有用了,編譯原理中的語法分析就可以消除所有括號,並且保證運算優先順序正確。當然要進行語法分析之前,還要做詞法分析,在語法分析完之後會生成一顆抽象語法樹,最後用中序遍歷的方式遍歷以及列印樹中節點的內容,就能看到優化後的表示式。
上述表示式解析完後,得到如下表示式。
a1=v48*v34+v19*v2*v14*v34+v44*v34+v40*v35+v35*v39+v32*v35+v10*v28+v10*v25+v23*v10+v9*v2*v14*v11+v8*v9-v9*v12-v9*v17+v9*v19-v9*v20-v22*v10-v10*v26-v10*v27-v36*v35-v38*v35-v35*v41-v42*v34-v46*v34-v47*v34
複雜表示式
使用for迴圈的迭代不僅可以迭代普通的list,還可以迭代dict。假設有如下的dict d 完全可以通過乙個複雜的列表生成式把它變成乙個 html tds s s name,score forname,score ind.iteritems print print name score print...
表示式解析
1 本文目標 分析用堆疊解析算術表示式的基本方法。給出的示例 能解析任何包括 和0到9數字組成的算術表示式。2 中綴表示式和字尾表示式 中綴表示式就是通常所說的算術表示式,比如 1 2 3 4。字尾表示式是指通過解析後,運算子在運算數之後的表示式,比如上式解析成字尾表示式就是12 3 4 這種表示式...
python 複雜表示式
使用for迴圈的迭代不僅可以迭代普通的list,還可以迭代dict。假設有如下的dict d 完全可以通過乙個複雜的列表生成式把它變成乙個 html tds s s name,score for name,score in d.iteritems print print name score pri...