【C語言是世界上最好的語言】逆向之自增(++)運算符前綴和后綴的區別!


今天我們來逆向分析C語言中++和—運算符前綴和后綴的區別!

提到這里,相信有不少小伙伴也早有過疑問,如前綴++表示”先加再用”,后綴++表示”先用再加”,今天經過我們的逆向分析,相信大家就會更加理解這其中的意義!

我們這里以++為例,分別進行逆向分析實驗,觀察匯編代碼,先看一個簡單的程序:


 

在++語句之前,我們下斷點,然后點擊view-Debug Windows-Disassembly 打開反匯編窗口,可以看到a = i++;這句話對應的匯編語句,如下:


 

重點就是這五條匯編語句,請大家對照;后面的注釋逐條分析!

———————————

;先把變量i保存到eax中

0040D71F      mov       eax,dword ptr [ebp-8]

;后把eax也就是i的值放到a里

0040D722      mov       dword ptr [ebp-4],eax

;把i的值取出來,放到ecx里

0040D725      mov       ecx,dword ptr [ebp-8]

;ecx進行+1,也就是++這個動作!

0040D728      add       ecx,1

;把ecx放回去,放到i里。完成!

0040D72B      mov       dword ptr [ebp-8],ecx

———————————

怎么樣,大家看明白了嗎?

 

下面,我們把代碼改一下,將后綴++改為前綴++,再進行分析,代碼如下:


 

還是在下斷點,看反匯編語句,打開如下:


 

看一下,還是五條,我們復制出來,逐行分析:

——————————

;將i的值保存到eax里:

0040D71F      mov       eax,dword ptr [ebp-8]

;把eax里的值加1:

0040D722      add       eax,1

;把eax的值放回i里:

0040D725      mov       dword ptr [ebp-8],eax

;把i里的值放到ecx里:

0040D728      mov       ecx,dword ptr [ebp-8]

;把ecx里的值放到a里,完成!

0040D72B      mov       dword ptr [ebp-4],ecx

——————————

怎么樣,大家看懂了嗎?我們可以看出這里VC6其實把++和賦值(也就是”用”);分開處理,前綴就先加,后綴就先賦值。

–與++類似,對應的匯編語句會由add變為sub,大家可以自行實驗對比。

通過這此分析,想必一定會加深我們對前綴和后綴的區別。

建議大家親自上機實驗,可以適當改變C語言程序,觀察對應匯編語句的變化。

——————————————————————

- END -

不管你是轉行也好,初學也罷,進階也可,如果你想學編程,進階程序員~

【值得關注】我的 編程學習交流俱樂部 !【點擊進入】

C語言入門資料(網盤鏈接免費分享):


 

C語言推薦書籍(PDF免費分享):


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM