#includeint main()
00401010 >|> \55 push ebp
00401011 |. 8bec mov ebp,esp
00401013 |. 83ec 44 sub esp,44
00401016 |. 53 push ebx
00401017 |. 56 push esi
00401018 |. 57 push edi
00401019 |. 8d7d bc lea edi,dword ptr ss:[ebp-44]
0040101c |. b9 11000000 mov ecx,11
00401021 |. b8 cccccccc mov eax,cccccccc
00401026 |. f3:ab rep stos dword ptr es:[edi]
00401028 |. c745 fc 00000>mov dword ptr ss:[ebp-4],0
0040102f |. eb 09 jmp short dia.0040103a
00401031 |> 8b45 fc /mov eax,dword ptr ss:[ebp-4] ; 把變數的值賦值給eax
00401034 |. 83c0 01 |add eax,1 ; eax 加1
00401037 |. 8945 fc |mov dword ptr ss:[ebp-4],eax ; +1處理後 賦值給原來儲存變數的位址
0040103a |> 837d fc 0a cmp dword ptr ss:[ebp-4],0a ; 判斷次數是否有10次
0040103e |. 7d 13 |jge short dia.00401053 ; 如果當前變數的值等於a
00401040 |. 8b4d fc |mov ecx,dword ptr ss:[ebp-4] ; 變數的值 賦值給 ecx
00401043 |. 51 |push ecx ; /
00401044 |. 68 1c204200 |push offset dia.??_c@_02mhac@?$cfp?$aa@ ; |format = "%d"
00401049 |. e8 22000000 |call dia.printf ; \printf
0040104e |. 83c4 08 |add esp,8 ; 棧頂下降
函式陣列迴圈:
#includebool tofor(int arr,int n){
for(int i=0;imov dword ptr ss:[ebp-4],0 ; 把0賦值給 乙個位址指向的值
0040103f |. eb 09 jmp short dia.0040104a ; 跳轉
00401041 |> 8b45 fc /mov eax,dword ptr ss:[ebp-4] ; 把當前變數的值賦值給eax
00401044 |. 83c0 01 |add eax,1 ; 變數遞增1
00401047 |. 8945 fc |mov dword ptr ss:[ebp-4],eax ; 改變當前變數的值,值為eax
0040104a |> 8b4d fc mov ecx,dword ptr ss:[ebp-4] ; 把當前的值賦值給ecx,ecx是用來儲存次數的,這裡我**寫的不好,計數的時候和變數的值是一樣的,比較容易混淆
0040104d |. 3b4d 0c |cmp ecx,dword ptr ss:[ebp+c] ; 比較次數是否為a
00401050 |. 7d 19 |jge short dia.0040106b ; 如果為a的話 則跳出迴圈
00401052 |. 8b55 fc |mov edx,dword ptr ss:[ebp-4] ; 將當前儲存的變數賦值給edx
00401055 |. 8b45 08 |mov eax,dword ptr ss:[ebp+8] ; 儲存的第乙個變數中的值賦值給eax
0040105b |. 51 |push ecx ; /
0040105c |. 68 1c204200 |push offset dia.??_c@_03hmfc@?$cfd?6?$a>; |format = "%d
"00401061 |. e8 da000000 |call dia.printf ; \printf
00401066 |. 83c4 08 |add esp,8 ; 降低棧頂,因為當前堆疊的位址已經沒用了,需要降低
函式陣列指標迴圈:
#includebool tofor(int* arr,int n){
for(int i=0;i你會發現彙編**跟上面的是一樣的!
c 反彙編 迴圈結構
debug 23 int nsum 0 00a572ae c7 45 f8 00 0000 00mov dword ptr nsum 0 24 int nindex 0 00a572b5 c7 45 ec 00 0000 00mov dword ptr nindex 0 25 do 26 while...
反彙編簡介
在傳統的軟體開發模型中,程式設計師使用編譯器 彙編器 鏈結器中的乙個或者幾個建立可執行程式,為了回溯程式設計過程,可以使用各種工具來撤銷彙編和編譯過程,這些工具就叫做反彙編器和反編譯器。反彙編器 以機器語言作為輸入,得到組合語言形式的輸出結果 反編譯器 以機器語言作為輸入,得到高階語言形式的輸出結果...
反彙編個人練習 不用迴圈語句實現迴圈操作
includeusing namespace std int main int a 10 if a 0 while true else cout 部分彙編語句 3 int main 4 00401780 push ebp main 00401780,該函式指令的首位址,函式名代表該函式內第一條指令的...