masm32的一个小exe,使用OD打开看到的汇编代码,有些地方不明白,请教请教:
00401000 > 6A 00 PUSH 0
00401002 E8 D5020000 CALL <JMP.&kernel32.GetModuleHandleA>
00401007 A3 10304000 MOV DWORD PTR DS:[403010],EAX
0040100C E8 C5020000 CALL <JMP.&kernel32.GetCommandLineA>
00401011 A3 08304000 MOV DWORD PTR DS:[403008],EAX
00401016 6A 0A PUSH 0A
00401018 FF35 08304000 PUSH DWORD PTR DS:[403008]
0040101E 6A 00 PUSH 0
00401020 FF35 10304000 PUSH DWORD PTR DS:[403010]
00401026 E8 06000000 CALL generic.00401031
0040102B 50 PUSH EAX
0040102C E8 9F020000 CALL <JMP.&kernel32.ExitProcess>
00401031 55 PUSH EBP
00401032 8BEC MOV EBP,ESP
00401034 83C4 A4 ADD ESP,-5C
00401037 EB 0E JMP SHORT generic.00401047
00401039 47 INC EDI
0040103A 65:6E OUTS DX,BYTE PTR ES:[EDI] ; I/O 命令
0040103C 65:72 69 JB SHORT generic.004010A8 ; 多余前缀
0040103F 635F 43 ARPL WORD PTR DS:[EDI+43],BX
00401042 6C INS BYTE PTR ES:[EDI],DX ; I/O 命令
00401043 61 POPAD
00401044 73 73 JNB SHORT generic.004010B9
00401046 00C7 ADD BH,AL
00401048 45 INC EBP
00401049 D030 SAL BYTE PTR DS:[EAX],1
0040104B 0000 ADD BYTE PTR DS:[EAX],AL
0040104D 00C7 ADD BH,AL
0040104F 45 INC EBP
00401050 D4 03 AAM 3
00401052 2000 AND BYTE PTR DS:[EAX],AL
00401054 00C7 ADD BH,AL
00401056 45 INC EBP
00401057 D87B 11 FDIVR DWORD PTR DS:[EBX+11]
0040105A 40 INC EAX
0040105B 00C7 ADD BH,AL
0040105D 45 INC EBP
0040105E DC00 FADD QWORD PTR DS:[EAX]
00401060 0000 ADD BYTE PTR DS:[EAX],AL
00401062 00C7 ADD BH,AL
00401064 45 INC EBP
00401065 E0 00 LOOPDNE SHORT generic.00401067
00401067 0000 ADD BYTE PTR DS:[EAX],AL
00401069 00FF ADD BH,BH
0040106B 75 08 JNZ SHORT generic.00401075
0040106D 8F45 E4 POP DWORD PTR SS:[EBP-1C]
00401070 C745 F0 1000000>MOV DWORD PTR SS:[EBP-10],10
00401077 C745 F4 0000000>MOV DWORD PTR SS:[EBP-C],0
0040107E C745 F8 3910400>MOV DWORD PTR SS:[EBP-8],generic.0040103>; ASCII "Generic_Class"
00401085 68 F4010000 PUSH 1F4
0040108A FF75 08 PUSH DWORD PTR SS:[EBP+8]
0040108D E8 02020000 CALL <JMP.&user32.LoadIconA>
00401092 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
00401095 68 007F0000 PUSH 7F00
0040109A 6A 00 PUSH 0
0040109C E8 ED010000 CALL <JMP.&user32.LoadCursorA>
004010A1 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
004010A4 C745 FC 0000000>MOV DWORD PTR SS:[EBP-4],0
004010AB 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
004010AE 50 PUSH EAX
004010AF E8 F8010000 CALL <JMP.&user32.RegisterClassExA>
004010B4 C745 B0 F401000>MOV DWORD PTR SS:[EBP-50],1F4
004010BB C745 AC 5E01000>MOV DWORD PTR SS:[EBP-54],15E
004010C2 6A 00 PUSH 0
004010C4 E8 BF010000 CALL <JMP.&user32.GetSystemMetrics>
004010C9 50 PUSH EAX
004010CA FF75 B0 PUSH DWORD PTR SS:[EBP-50]
004010CD E8 88010000 CALL generic.0040125A
004010D2 8945 A8 MOV DWORD PTR SS:[EBP-58],EAX
004010D5 6A 01 PUSH 1
004010D7 E8 AC010000 CALL <JMP.&user32.GetSystemMetrics>
004010DC 50 PUSH EAX
004010DD FF75 AC PUSH DWORD PTR SS:[EBP-54]
004010E0 E8 75010000 CALL generic.0040125A
004010E5 8945 A4 MOV DWORD PTR SS:[EBP-5C],EAX
004010E8 6A 00 PUSH 0
004010EA FF75 08 PUSH DWORD PTR SS:[EBP+8]
004010ED 6A 00 PUSH 0
004010EF 6A 00 PUSH 0
004010F1 FF75 AC PUSH DWORD PTR SS:[EBP-54]
004010F4 FF75 B0 PUSH DWORD PTR SS:[EBP-50]
004010F7 FF75 A4 PUSH DWORD PTR SS:[EBP-5C]
004010FA FF75 A8 PUSH DWORD PTR SS:[EBP-58]
004010FD 68 0000CF00 PUSH 0CF0000
00401102 68 00304000 PUSH generic.00403000 ; ASCII "Generic"
00401107 68 39104000 PUSH generic.00401039 ; ASCII "Generic_Class"
0040110C 68 00030000 PUSH 300
00401111 E8 5A010000 CALL <JMP.&user32.CreateWindowExA>
00401116 A3 0C304000 MOV DWORD PTR DS:[40300C],EAX
0040111B 68 58020000 PUSH 258
00401120 FF75 08 PUSH DWORD PTR SS:[EBP+8]
00401123 E8 72010000 CALL <JMP.&user32.LoadMenuA>
00401128 50 PUSH EAX
00401129 FF35 0C304000 PUSH DWORD PTR DS:[40300C]
0040112F E8 84010000 CALL <JMP.&user32.SetMenu>
00401134 6A 01 PUSH 1
00401136 FF35 0C304000 PUSH DWORD PTR DS:[40300C]
0040113C E8 7D010000 CALL <JMP.&user32.ShowWindow>
00401141 FF35 0C304000 PUSH DWORD PTR DS:[40300C]
00401147 E8 7E010000 CALL <JMP.&user32.UpdateWindow>
0040114C 6A 00 PUSH 0
0040114E 6A 00 PUSH 0
00401150 6A 00 PUSH 0
00401152 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
00401155 50 PUSH EAX
00401156 E8 27010000 CALL <JMP.&user32.GetMessageA>
0040115B 83F8 00 CMP EAX,0
0040115E 74 14 JE SHORT generic.00401174
00401160 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
00401163 50 PUSH EAX
00401164 E8 5B010000 CALL <JMP.&user32.TranslateMessage>
00401169 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
0040116C 50 PUSH EAX
0040116D E8 0A010000 CALL <JMP.&user32.DispatchMessageA>
00401172 ^ EB D8 JMP SHORT generic.0040114C
00401174 8B45 BC MOV EAX,DWORD PTR SS:[EBP-44]
00401177 C9 LEAVE
00401178 C2 1000 RETN 10
0040117B 55 PUSH EBP
0040117C 8BEC MOV EBP,ESP
0040117E 817D 0C 1101000>CMP DWORD PTR SS:[EBP+C],111
00401185 75 60 JNZ SHORT generic.004011E7
00401187 817D 10 E803000>CMP DWORD PTR SS:[EBP+10],3E8
0040118E 75 19 JNZ SHORT generic.004011A9
00401190 6A 00 PUSH 0
00401192 68 60F00000 PUSH 0F060
00401197 68 12010000 PUSH 112
0040119C FF75 08 PUSH DWORD PTR SS:[EBP+8]
0040119F E8 0E010000 CALL <JMP.&user32.SendMessageA>
004011A4 E9 9C000000 JMP generic.00401245
004011A9 817D 10 6C07000>CMP DWORD PTR SS:[EBP+10],76C
004011B0 0F85 8F000000 JNZ generic.00401245
004011B6 EB 19 JMP SHORT generic.004011D1
004011B8 41 INC ECX
004011B9 73 73 JNB SHORT generic.0040122E
004011BB 65:6D INS DWORD PTR ES:[EDI],DX ; I/O 命令
004011BD 626C65 72 BOUND EBP,QWORD PTR SS:[EBP+72]
004011C1 2C 20 SUB AL,20
004011C3 50 PUSH EAX
004011C4 75 72 JNZ SHORT generic.00401238
004011C6 65:2026 AND BYTE PTR GS:[ESI],AH
004011C9 2053 69 AND BYTE PTR DS:[EBX+69],DL
004011CC 6D INS DWORD PTR ES:[EDI],DX ; I/O 命令
004011CD 70 6C JO SHORT generic.0040123B
004011CF 65:006A 00 ADD BYTE PTR GS:[EDX],CH
004011D3 68 00304000 PUSH generic.00403000 ; ASCII "Generic"
004011D8 68 B8114000 PUSH generic.004011B8 ; ASCII "Assembler, Pure & Simple"
004011DD FF75 08 PUSH DWORD PTR SS:[EBP+8]
004011E0 E8 BB000000 CALL <JMP.&user32.MessageBoxA>
004011E5 EB 5E JMP SHORT generic.00401245
004011E7 837D 0C 01 CMP DWORD PTR SS:[EBP+C],1
004011EB 75 02 JNZ SHORT generic.004011EF
004011ED EB 56 JMP SHORT generic.00401245
004011EF 837D 0C 10 CMP DWORD PTR SS:[EBP+C],10
004011F3 75 3A JNZ SHORT generic.0040122F
004011F5 EB 14 JMP SHORT generic.0040120B
004011F7 50 PUSH EAX
004011F8 6C INS BYTE PTR ES:[EDI],DX ; I/O 命令
004011F9 65:61 POPAD ; 多余前缀
004011FB 73 65 JNB SHORT generic.00401262
004011FD 2043 6F AND BYTE PTR DS:[EBX+6F],AL
00401200 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O 命令
00401201 66:6972 6D 2045 IMUL SI,WORD PTR DS:[EDX+6D],4520
00401207 78 69 JS SHORT generic.00401272
00401209 74 00 JE SHORT generic.0040120B
0040120B 6A 04 PUSH 4
0040120D 68 00304000 PUSH generic.00403000 ; ASCII "Generic"
00401212 68 F7114000 PUSH generic.004011F7 ; ASCII "Please Confirm Exit"
00401217 FF75 08 PUSH DWORD PTR SS:[EBP+8]
0040121A E8 81000000 CALL <JMP.&user32.MessageBoxA>
0040121F 83F8 07 CMP EAX,7
00401222 75 21 JNZ SHORT generic.00401245
00401224 B8 00000000 MOV EAX,0
00401229 C9 LEAVE
0040122A C2 1000 RETN 10
0040122D EB 16 JMP SHORT generic.00401245
0040122F 837D 0C 02 CMP DWORD PTR SS:[EBP+C],2
00401233 75 10 JNZ SHORT generic.00401245
00401235 6A 00 PUSH 0
00401237 E8 6A000000 CALL <JMP.&user32.PostQuitMessage>
0040123C B8 00000000 MOV EAX,0
00401241 C9 LEAVE
00401242 C2 1000 RETN 10
00401245 FF75 14 PUSH DWORD PTR SS:[EBP+14]
00401248 FF75 10 PUSH DWORD PTR SS:[EBP+10]
0040124B FF75 0C PUSH DWORD PTR SS:[EBP+C]
0040124E FF75 08 PUSH DWORD PTR SS:[EBP+8]
00401251 E8 20000000 CALL <JMP.&user32.DefWindowProcA>
00401256 C9 LEAVE
00401257 C2 1000 RETN 10
0040125A 55 PUSH EBP
0040125B 8BEC MOV EBP,ESP
0040125D D16D 0C SHR DWORD PTR SS:[EBP+C],1
00401260 D16D 08 SHR DWORD PTR SS:[EBP+8],1
00401263 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401266 2945 0C SUB DWORD PTR SS:[EBP+C],EAX
00401269 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
0040126C C9 LEAVE
0040126D C2 0800 RETN 8
00401270 - FF25 48204000 JMP DWORD PTR DS:[<&user32.CreateWindowE>; user32.CreateWindowExA
00401276 - FF25 20204000 JMP DWORD PTR DS:[<&user32.DefWindowProc>; user32.DefWindowProcA
0040127C - FF25 40204000 JMP DWORD PTR DS:[<&user32.DispatchMessa>; user32.DispatchMessageA
00401282 - FF25 28204000 JMP DWORD PTR DS:[<&user32.GetMessageA>] ; user32.GetMessageA
00401288 - FF25 24204000 JMP DWORD PTR DS:[<&user32.GetSystemMetr>; user32.GetSystemMetrics
0040128E - FF25 10204000 JMP DWORD PTR DS:[<&user32.LoadCursorA>] ; user32.LoadCursorA
00401294 - FF25 14204000 JMP DWORD PTR DS:[<&user32.LoadIconA>] ; user32.LoadIconA
0040129A - FF25 18204000 JMP DWORD PTR DS:[<&user32.LoadMenuA>] ; user32.LoadMenuA
004012A0 - FF25 1C204000 JMP DWORD PTR DS:[<&user32.MessageBoxA>] ; user32.MessageBoxA
004012A6 - FF25 44204000 JMP DWORD PTR DS:[<&user32.PostQuitMessa>; user32.PostQuitMessage
004012AC - FF25 4C204000 JMP DWORD PTR DS:[<&user32.RegisterClass>; user32.RegisterClassExA
004012B2 - FF25 2C204000 JMP DWORD PTR DS:[<&user32.SendMessageA>>; user32.SendMessageA
004012B8 - FF25 30204000 JMP DWORD PTR DS:[<&user32.SetMenu>] ; user32.SetMenu
004012BE - FF25 34204000 JMP DWORD PTR DS:[<&user32.ShowWindow>] ; user32.ShowWindow
004012C4 - FF25 38204000 JMP DWORD PTR DS:[<&user32.TranslateMess>; user32.TranslateMessage
004012CA - FF25 3C204000 JMP DWORD PTR DS:[<&user32.UpdateWindow>>; user32.UpdateWindow
004012D0 - FF25 08204000 JMP DWORD PTR DS:[<&kernel32.ExitProcess>; kernel32.ExitProcess
004012D6 - FF25 04204000 JMP DWORD PTR DS:[<&kernel32.GetCommandL>; kernel32.GetCommandLineA
004012DC - FF25 00204000 JMP DWORD PTR DS:[<&kernel32.GetModuleHa>; kernel32.GetModuleHandleA
004012E2 0000 ADD BYTE PTR DS:[EAX],AL
004012E4 0000 ADD BYTE PTR DS:[EAX],AL
004012E6 0000 ADD BYTE PTR DS:[EAX],AL
有些地方指令,从来没有见过,看不明白,请教请教:
00401050 D4 03 AAM 3 ;AAM 3啥意思?
00401057 D87B 11 FDIVR DWORD PTR DS:[EBX+11] ;FDIVR啥意思?
0040105E DC00 FADD QWORD PTR DS:[EAX] ;FADD啥意思?
00401065 E0 00 LOOPDNE SHORT generic.00401067 ;LOOPDNE啥意思?
00401177 C9 LEAVE ;LEAVE啥意思?
00401178 C2 1000 RETN 10 ;10啥意思,为什么要加一个10?
004011BB 65:6D INS DWORD PTR ES:[EDI],DX ;INS啥意思?
004011BD 626C65 72 BOUND EBP,QWORD PTR SS:[EBP+72] ;BOUND啥意思?
004011CD 70 6C JO SHORT generic.0040123B ;JO啥意思?
004011F9 65:61 POPAD ;POPAD啥意思?
00401200 6E OUTS DX,BYTE PTR ES:[EDI] ;OUTS啥意思?
00401201 66:6972 6D 2045 IMUL SI,WORD PTR DS:[EDX+6D],4520 ;IMUL啥意思?
00401207 78 69 JS SHORT generic.00401272 ;JS啥意思?
00401270 - FF25 48204000 JMP DWORD PTR DS:[<&user32.CreateWindowE>; ;JMP到一个函数那里啥意思?
004012E4 0000 ADD BYTE PTR DS:[EAX],AL ;代码后面有近1000行的“0000 ADD BYTE PTR DS:[EAX],AL”啥意思?
[培训]科锐逆向工程师培训第53期2025年7月8日开班!