反彙編 迴圈

2022-03-13 22:48:06 字數 3867 閱讀 5683

#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,該函式指令的首位址,函式名代表該函式內第一條指令的...