C++程序反編譯筆記(3)代碼重構(gòu)
????代碼重構(gòu)就是將混亂難懂的代碼通過等價代換的方式變成簡單易懂的代碼的過程。
????好的代碼應(yīng)該是順序清晰,變量節(jié)約,層次較淺的。
????所謂順序清晰,就是執(zhí)行順序一眼就能看得明白,不會胡亂地跳轉(zhuǎn),因此,在代碼重構(gòu)的過程中應(yīng)該盡量去掉goto語句和對longjmp函數(shù)的調(diào)用。goto語句可以轉(zhuǎn)為if,while,for,switch,break,continue等跳轉(zhuǎn)位置清晰的語句。而longjmp則可以通過拆分,增加函數(shù)來去掉。
????所謂變量節(jié)約,就是使用較少的變量,越多的變量越難讓人記住全部變量的含義。由于高級語言編譯為機器語言的時候,會經(jīng)常使用寄存器,因此,反編譯后的代碼會出現(xiàn)非常多的中間(臨時)變量,合并這些中間變量可以極大地降低代碼量。
????所謂層次較淺,就是大括號嵌套層次越低越好,大括號的特性就是不容易看情況哪個{和哪個}匹配,即使是python這樣的不使用大括號表示塊的語言,也很難分清哪個塊在哪結(jié)束。降低大括號層次的方法通常是將條件取反,比如if(a){...} return; 改成if(!a)return; ...return;
標(biāo)簽: