两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

  • 歡迎訪問C語言網(wǎng)www.sztianhecheng.cn 比賽欄每月有獎(jiǎng)月賽!舉辦比賽聯(lián)系QQ:2045302297
  • 問題反饋、粉絲交流 QQ群327452739 藍(lán)橋杯訓(xùn)練群:113766799 申請(qǐng)群時(shí)請(qǐng)備注排名里的昵稱
  • C語言研究中心 為您提供有圖、有料、解渴的C語言專題! 歡迎討論!

C語言逆向之表達(dá)式短路分析及應(yīng)用

C語言研究中心 CTO 11582次瀏覽 1個(gè)評(píng)論

大家在學(xué)習(xí)C語言過程中,可能會(huì)見到過一些這樣的題,就是表達(dá)式短路,表達(dá)式短路主要體現(xiàn)在C語言中邏輯運(yùn)算符&&和||。今天將對(duì)表達(dá)式短路的做逆向分析,來深入理解它。

 

首先利用表達(dá)式短路,我們可以寫一個(gè)很經(jīng)典的累加求和的函數(shù),代碼如下:

C語言逆向之表達(dá)式短路分析及應(yīng)用

 

功能很簡單,就是求1+2+…+99+100的數(shù)字和的一個(gè)程序,但用遞歸寫了出來,利用邏輯與運(yùn)算,左邊判斷是否遞歸到0,右邊累加求和,其中的技巧巧妙的運(yùn)用邏輯與運(yùn)算的短路特點(diǎn),實(shí)現(xiàn)累加的效果。請(qǐng)大家自行分析理解~

下面我們斷點(diǎn)反匯編,查看重點(diǎn)num && (num += Add(num-1));語句的匯編代碼,如下

 

 

C語言逆向之表達(dá)式短路分析及應(yīng)用

 

 

下面詳細(xì)分析:

 

;比較num是否為0! 這里也就是邏輯與表達(dá)式左邊的判斷!

0040D718?????? cmp???????? dword ptr [ebp+8],0

;判斷ZF標(biāo)志位是否為1然后進(jìn)行跳轉(zhuǎn),到return處

0040D71C????? ?je????????? Add+35h (0040d735)

;繼續(xù)把num變量送入eax寄存器

0040D71E???? ??mov???????? eax,dword ptr [ebp+8]

;對(duì)num減1

0040D721?????? sub???????? eax,1

;結(jié)果作為參數(shù),壓棧準(zhǔn)備進(jìn)入遞歸調(diào)用

0040D724??? ???push??????? eax

;繼續(xù)調(diào)用Add函數(shù),地址位于0040100a處

0040D725??? ???call??????? @ILT+5(_Add) (0040100a)

;棧清空

0040D72A?? ????add???????? esp,4

;將num里的值放入ecx寄存器里

0040D72D?????? mov???????? ecx,dword ptr [ebp+8]

;進(jìn)行累加運(yùn)算

0040D730???? ??add???????? ecx,eax

;放回num地址處

0040D732?????? mov???????? dword ptr [ebp+8],ecx

;此處為return num 返回Add函數(shù)結(jié)束

0040D735?????? mov???????? eax,dword ptr [ebp+8]

 

 

大家通過閱讀匯編代碼,上下文聯(lián)系應(yīng)該就可以分析出來,遞歸調(diào)用時(shí)候的每次參數(shù)遞減,進(jìn)行累加求和,正因?yàn)檫壿嬇c運(yùn)算的短路特點(diǎn)會(huì)先判斷左邊num的值是否減到了0來決定是否還算右邊的表達(dá)式,匯編代碼對(duì)應(yīng)num為0時(shí)JE比對(duì)跳轉(zhuǎn)到return處;而為假時(shí)繼續(xù)計(jì)算右邊表達(dá)式,進(jìn)行call命令遞歸調(diào)用,棧地址不斷變化直至0結(jié)束return返回。

大家仔細(xì)體會(huì)!

 

以上就是邏輯與運(yùn)算中短路的特點(diǎn)以及運(yùn)用短路來實(shí)現(xiàn)語句中斷的例子!邏輯或原理也相同,大家可以自行實(shí)驗(yàn)!歡迎討論!

 

C語言研究中心(www.sztianhecheng.cn)

C語言網(wǎng)提供「C語言、C++、算法競賽」在線課程,全部由資深研發(fā)工程師或ACM金牌大佬親授課,更科學(xué)、全面的課程體系,以在線視頻+在線評(píng)測的學(xué)習(xí)模式學(xué)習(xí),學(xué)練同步,拒絕理論派,真正學(xué)會(huì)編程!還有獎(jiǎng)學(xué)金等增值福利等你!

C語言網(wǎng), 版權(quán)所有丨如未注明 , 均為原創(chuàng)丨本網(wǎng)站采用BY-NC-SA協(xié)議進(jìn)行授權(quán) , 轉(zhuǎn)載請(qǐng)注明C語言逆向之表達(dá)式短路分析及應(yīng)用!
喜歡 (28)
[jinyangH@aliyun.com]
分享 (0)
發(fā)表我的評(píng)論
取消評(píng)論
表情

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
(1)個(gè)小伙伴在吐槽
  1. 老師 這個(gè)代碼是不是一直在重復(fù)調(diào)用函數(shù),直到上面這個(gè)表達(dá)式中的左邊的num因?yàn)檎{(diào)用函數(shù)運(yùn)算的結(jié)果為零了,然后這個(gè)調(diào)用就結(jié)束了,也就是不在運(yùn)算表達(dá)式左邊的值了。也就是不再調(diào)用而是執(zhí)行加最后一個(gè)零了。
    宸宸2017-05-16 08:49 回復(fù)