能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这个大概有助于楼主理解
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
TITLE .686P .XMM include listing.inc .model flat
INCLUDELIB OLDNAMES
EXTRN @__security_check_cookie@4:PROC PUBLIC _main EXTRN ___security_cookie:DWORD EXTRN ___CxxFrameHandler3:PROC ; COMDAT xdata$x ; xdata$x SEGMENT __catchsym$_main$2 DD 00H DD 00H DD 00H DD FLAT:__catch$_main$0 __unwindtable$_main DD 0ffffffffH DD 00H DD 0ffffffffH DD 00H __tryblocktable$_main DD 00H DD 00H DD 01H DD 01H DD FLAT:__catchsym$_main$2 __ehfuncinfo$_main DD 019930522H DD 02H DD FLAT:__unwindtable$_main DD 01H DD FLAT:__tryblocktable$_main DD 2 DUP(00H) DD 00H DD 00H ; Function compile flags: /Ogtpy xdata$x ENDS ; COMDAT _main _TEXT SEGMENT __$EHRec$ = -16 ; size = 16 _main PROC ; COMDAT
; 7 : {
push ebp mov ebp, esp push -1 push __ehhandler$_main mov eax, DWORD PTR fs:0 push eax push ecx push ebx push esi push edi mov eax, DWORD PTR ___security_cookie xor eax, ebp push eax lea eax, DWORD PTR __$EHRec$[ebp+4] mov DWORD PTR fs:0, eax mov DWORD PTR __$EHRec$[ebp], esp
; 8 : ; 9 : try ; 10 : {
xor eax, eax mov DWORD PTR __$EHRec$[ebp+12], eax
; 11 : int *p=0; ; 12 : *p=1;
mov DWORD PTR [eax], 1
; 13 : ; 14 : return *p;
mov eax, 1
; 19 : } ; 20 : }
mov ecx, DWORD PTR __$EHRec$[ebp+4] mov DWORD PTR fs:0, ecx pop ecx pop edi pop esi pop ebx mov esp, ebp pop ebp ret 0 __catch$_main$0:
; 15 : } ; 16 : catch(...) ; 17 : { ; 18 : return 0;
mov DWORD PTR __$EHRec$[ebp+12], -1 mov eax, $LN7@main ret 0 $LN7@main: xor eax, eax
; 19 : } ; 20 : }
mov ecx, DWORD PTR __$EHRec$[ebp+4] mov DWORD PTR fs:0, ecx pop ecx pop edi pop esi pop ebx mov esp, ebp pop ebp ret 0 _TEXT ENDS ; COMDAT text$x text$x SEGMENT __ehhandler$_main: mov edx, DWORD PTR [esp+8] lea eax, DWORD PTR [edx+12] mov ecx, DWORD PTR [edx-20] xor ecx, eax call @__security_check_cookie@4 mov eax, OFFSET __ehfuncinfo$_main jmp ___CxxFrameHandler3 text$x ENDS _main ENDP END
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
谁能详细的把每一行汇编代码注释一下,谢谢。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
学习了,大概还能看的东
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
怎么没人回答啊·支持我也想看懂他
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
早上起来就看到这个
|
能力值:
( LV9,RANK:180 )
|
-
-
7 楼
要跨出这一步很难
|
能力值:
(RANK:300 )
|
-
-
8 楼
00401190 /$ 55 PUSH EBP
00401191 |. 8BEC MOV EBP,ESP
00401193 |. 6A FF PUSH -1 ;以下安装SEH(EBP-4)
00401195 |. 68 F01A4000 PUSH tests.00401AF0 ;指向你的catch 异常处理程序(EBP-8)
0040119A |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0] ;保存原有的异常处理结构
004011A0 |. 50 PUSH EAX ;完成链表 (EBP-C)
004011A1 |. 51 PUSH ECX ;(EBP-10)
004011A2 |. 53 PUSH EBX ;(EBP-14)
004011A3 |. 56 PUSH ESI ;(EBP-18)
004011A4 |. 57 PUSH EDI ;(EBP-1C)
004011A5 |. A1 00304000 MOV EAX,DWORD PTR DS:[403000]
004011AA |. 33C5 XOR EAX,EBP
004011AC |. 50 PUSH EAX ;(EBP-20)
004011AD |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] ;获得异常结构表头
004011B0 |. 64:A3 0000000>MOV DWORD PTR FS:[0],EAX ;安装完成异常处理函数
004011B6 |. 8965 F0 MOV DWORD PTR SS:[EBP-10],ESP
004011B9 |. 33C0 XOR EAX,EAX ;EAX 清零
004011BB |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ;
004011BE |. C700 01000000 MOV DWORD PTR DS:[EAX],1 ;给EAX所指的地址赋值相当于*p=1(EAX 是NULL 会报错触发异常)
004011C4 |. B8 01000000 MOV EAX,1 ;这个是返回 return *p, 编译器听聪明直接就知道 *p里面是1了。
004011C9 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
004011CC |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
004011D3 |. 59 POP ECX
004011D4 |. 5F POP EDI
004011D5 |. 5E POP ESI
004011D6 |. 5B POP EBX
004011D7 |. 8BE5 MOV ESP,EBP
004011D9 |. 5D POP EBP
004011DA \. C3 RETN
我为什么会这般有兴致看这个问题呢,大约其他问题都太难了。好歹这个我还会点。
呵呵...
|
能力值:
( LV12,RANK:210 )
|
-
-
9 楼
我什么时候能到达"狐狸"的水平就好了。继续努力!膜拜"狐狸"一个.
|
|
|