switch反彙編 C語言

2022-02-23 18:21:31 字數 1770 閱讀 1759

在分支較多的時候,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 x = 5;

0040d778 mov dword ptr [ebp-4],5

6: switch(x)

7:

跳轉表從[edx*4+40d81fh]取出分支的位址值然後進行jmp,下表是跳轉表部分

0040d81f  9e d7 40 00  ..@.

0040d823 b1 d7 40 00 ..@.

0040d827 c4 d7 40 00 ..@.

0040d82b d7 d7 40 00 ..@.

0040d82f ea d7 40 00 ..@.

#include void main()

return;

}

5:        int x = 5;

00401028 mov dword ptr [ebp-4],5

6: switch(x)

7:

索引表

004010f1  00 01 02 03 05 05 05 05  ........

004010f9 05 05 05 05 05 05 05 05 ........

00401101 05 05 05 05 05 05 05 05 ........

00401109 05 05 05 05 05 05 05 05 ........

00401111 05 05 05 05 05 05 05 05 ........

00401119 05 05 05 05 05 05 05 05 ........

00401121 05 05 05 05 05 05 05 05 ........

00401129 05 05 05 05 05 05 05 05 ........

00401131 05 05 05 05 05 05 05 05 ........

00401139 05 05 05 05 05 05 05 05 ........

00401141 05 05 05 05 05 05 05 05 ........

00401149 05 05 05 05 05 05 05 04 ........

跳轉表

004010d9  58 10 40 00  x.@.

004010dd 6b 10 40 00 k.@.

004010e1 7e 10 40 00 ~.@.

004010e5 91 10 40 00 ..@.

004010e9 a4 10 40 00 ..@.

004010ed b7 10 40 00 ..@.

C 反彙編四 SWITCH語句

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

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 在分支比較多的時候 在編譯的時候會生成乙個大表 ...