C 反彙編四 SWITCH語句

2021-06-03 20:13:10 字數 1397 閱讀 9868

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...