今天我們來逆向分析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免費分享):
