posts - 15, comments - 8, trackbacks - 0, articles - 2

switch ,,,case逻辑的逆向

Posted on 2010-04-27 14:39 小天狼星 阅读(403) 评论(2)  编辑 收藏 引用

  


下面是一段典型的switch...case 语句:

 1042C969F    83FD 03          cmp     ebp, 3
 2042C96A2    0F87 02010000    ja      042C97AA
 3042C96A8    FF24AD F8972C04  jmp     dword ptr [ebp*4+42C97F8]        ; js.042C96CB
 4042C96AF    8BCF             mov     ecx, edi
 5042C96B1    2BCE             sub     ecx, esi
 6042C96B3    51               push    ecx
 7042C96B4    8B4C24 24        mov     ecx, dword ptr [esp+24]
 8042C96B8    56               push    esi
 9042C96B9    8D9424 94000000  lea     edx, dword ptr [esp+94]
10042C96C0    52               push    edx
11042C96C1    E8 0A86F8FF      call    04251CD0
12042C96C6    E9 E7000000      jmp     042C97B2
13042C96CB    8BC7             mov     eax, edi
14042C96CD    2BC6             sub     eax, esi
15042C96CF    50               push    eax
16042C96D0    56               push    esi
17042C96D1    8D4C24 30        lea     ecx, dword ptr [esp+30]
18042C96D5    51               push    ecx
19042C96D6    8D8C24 98000000  lea     ecx, dword ptr [esp+98]
20042C96DD    E8 2EE6F8FF      call    04257D10
21042C96E2    3958 18          cmp     dword ptr [eax+18], ebx
22042C96E5    72 05            jb      short 042C96EC
23042C96E7    8B40 04          mov     eax, dword ptr [eax+4]
24042C96EA    EB 03            jmp     short 042C96EF
25042C96EC    83C0 04          add     eax, 4
26042C96EF    50               push    eax
27042C96F0    E8 06450400      call    0430DBFB
28042C96F5    8B5424 28        mov     edx, dword ptr [esp+28]
29042C96F9    83C4 04          add     esp, 4
30042C96FC    395C24 40        cmp     dword ptr [esp+40], ebx
31042C9700    8902             mov     dword ptr [edx], eax
32042C9702    0F82 AA000000    jb      042C97B2
33042C9708    8B4424 2C        mov     eax, dword ptr [esp+2C]
34042C970C    50               push    eax
35042C970D    E8 F8330400      call    0430CB0A
36042C9712    83C4 04          add     esp, 4
37042C9715    E9 98000000      jmp     042C97B2
38042C971A    8BCF             mov     ecx, edi
39042C971C    2BCE             sub     ecx, esi
40042C971E    51               push    ecx
41042C971F    56               push    esi
42042C9720    8D5424 4C        lea     edx, dword ptr [esp+4C]
43042C9724    52               push    edx
44042C9725    8D8C24 98000000  lea     ecx, dword ptr [esp+98]
45042C972C    E8 DFE5F8FF      call    04257D10
46042C9731    3958 18          cmp     dword ptr [eax+18], ebx
47042C9734    72 05            jb      short 042C973B
48042C9736    8B40 04          mov     eax, dword ptr [eax+4]
49042C9739    EB 03            jmp     short 042C973E
50042C973B    83C0 04          add     eax, 4
51042C973E    50               push    eax
52042C973F    E8 B7440400      call    0430DBFB
53042C9744    8B4C24 1C        mov     ecx, dword ptr [esp+1C]
54042C9748    83C4 04          add     esp, 4
55042C974B    395C24 5C        cmp     dword ptr [esp+5C], ebx
56042C974F    8901             mov     dword ptr [ecx], eax
57042C9751    72 5F            jb      short 042C97B2
58042C9753    8B5424 48        mov     edx, dword ptr [esp+48]
59042C9757    52               push    edx
60042C9758    E8 AD330400      call    0430CB0A
61042C975D    83C4 04          add     esp, 4
62042C9760    EB 50            jmp     short 042C97B2
63042C9762    8BC7             mov     eax, edi
64042C9764    2BC6             sub     eax, esi
65042C9766    50               push    eax
66042C9767    56               push    esi
67042C9768    8D4C24 68        lea     ecx, dword ptr [esp+68]
68042C976C    51               push    ecx
69042C976D    8D8C24 98000000  lea     ecx, dword ptr [esp+98]
70042C9774    E8 97E5F8FF      call    04257D10
71042C9779    3958 18          cmp     dword ptr [eax+18], ebx
72042C977C    72 05            jb      short 042C9783
73042C977E    8B40 04          mov     eax, dword ptr [eax+4]
74042C9781    EB 03            jmp     short 042C9786
75042C9783    83C0 04          add     eax, 4
76042C9786    50               push    eax
77042C9787    E8 6F440400      call    0430DBFB
78042C978C    8B5424 20        mov     edx, dword ptr [esp+20]
79042C9790    83C4 04          add     esp, 4
80042C9793    395C24 78        cmp     dword ptr [esp+78], ebx
81042C9797    8902             mov     dword ptr [edx], eax
82042C9799    72 17            jb      short 042C97B2
83042C979B    8B4424 64        mov     eax, dword ptr [esp+64]
84042C979F    50               push    eax
85042C97A0    E8 65330400      call    0430CB0A
86042C97A5    83C4 04          add     esp, 4
87042C97A8    EB 08            jmp     short 042C97B2
88042C97AA    C74424 14 000000>mov     dword ptr [esp+14], 0
89042C97B2    83C5 01          add     ebp, 1
90
91

Feedback

# re: switch ,,,case逻辑的逆向  回复  更多评论   

2010-04-27 22:55 by bester
我有个学长,网名也叫小天狼星,不知道是不是阁下,嘿嘿……
关于switch的结构分析我也有学习过,笔记如下:
http://www.cppblog.com/besterChen/archive/2009/12/07/102682.html
希望对你有所帮助,顺便给自己的博客打个广告,哈哈~

# re: switch ,,,case逻辑的逆向  回复  更多评论   

2010-08-05 00:49 by 小天狼星
@bester
恩,你的眼力很好。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理