004015d0 push ebp
004015d1 mov ebp,esp
004015d3 sub esp,48h
004015d6 push ebx
004015d7 push esi
004015d8 push edi
004015d9 lea edi,[ebp-48h]
004015dc mov ecx,12h
004015e1 mov eax,0cccccccch
004015e6 rep stos dword ptr [edi] // 初始化堆疊
49: int x=5;
004015e8 mov dword ptr [ebp-4],5 // 區域性變數ebp-4賦值5
50: switch (x)
51:
56: break;
00401627 jmp grammer_switch+0b7h (00401687) //跳出switch語句
57: case 1:
58:
61: break;
00401647 jmp grammer_switch+0b7h (00401687) //跳出switch語句
62: case 2:
63:
66: break;
00401667 jmp grammer_switch+0b7h (00401687) //跳出switch語句
67: default:
68:
71: break;
72: }
73:74: }
00401687 pop edi
00401688 pop esi
00401689 pop ebx
0040168a add esp,48h
0040168d cmp ebp,esp
0040168f call __chkesp (004092e0)
00401694 mov esp,ebp
00401696 pop ebp
00401697 ret
switch語句反彙編分析
switch語句如下 反彙編 為 將區域性變數flag存放現在棧底即 ebp 8 然後通過 eax做中轉,在 ebp 4 存放乙個 flag 的備份,複製到 ecx中對其進行減一操作,其中的1則是 case 分支中的最小值,然後將操作完的數儲存到 ebp 4 中,此時為 flag 1 2 接著進行 ...
switch語句反彙編分析
假設switch語句的分支比較少的時候 例如3,少於4的時候沒有意義 沒有必要使用此結構,相當於if 可觀察反彙編得出此結論 1 各個分支常量的差值較大的時候,編譯器會在效率還是記憶體進行取捨,這個時候編譯器還是會編譯成類似於if,else的結構。2 在分支比較多的時候 在編譯的時候會生成乙個大表 ...
switch反彙編 C語言
在分支較多的時候,switch的效率比if高,在反彙編中我們即可看到效率高的原因 include void main return 5 int x 5 00401028 mov dword ptr ebp 4 5 6 switch x 7 include void main return 5 int...