Литмир - Электронная Библиотека

·.text:00401000

·.text:00401000 main proc near; CODE XREF: start+AFp

·.text:00401000

·.text:00401000 var_54 = byte ptr -54h

·.text:00401000 var_44 = byte ptr -44h

·.text:00401000 var_34 = byte ptr -34h

·.text:00401000 var_14 = dword ptr -14h

·.text:00401000 var_10 = byte ptr -10h

·.text:00401000

·.text:00401000 push ebp

·.text:00401001 mov ebp, esp

·.text:00401001 ; Открытие кадра стека

·.text:00401003 sub esp, 54h

·.text:00401003 ; Резервируется 0x54 байта для локальных переменных

·.text:00401006 push offset aPrintfBugDemo; "printf bug demo\n"

·.text:00401006 ; Занесение в стек строки “ printf bug demo"

·.text:0040100B call _printf

·.text:0040100B ; Вызов printf(“printf bug demo\n")

·.text:00401010 add esp, 4

·.text:00401010 ; Балансировка стека

·.text:00401013 push offset aR; "r"

·.text:00401013 ; Занесение в стек смещения строки “r”

·.text:00401018 push offset aBuff_psw; "buff.psw"

·.text:00401018; Занесение в стек смещения строки “buff.psw”

·.text:0040101D call _fopen

·.text:0040101D; Вызов fopen(“buff.psw”,”r”);

·.text:00401022 add esp, 8

·.text:00401022; Балансировка стека

·.text:00401025 mov [ebp+var_14], eax

·.text:00401025; Переменная var_14 представляет собой указатель файла psw

·.text:00401028 cmp [ebp+var_14], 0

·.text:00401028; Файл открыт успешно?

·.text:0040102C jnz short loc_0_401033

·.text:0040102C ; Файл открыт успешно! Продолжение выполнения программы

·.text:0040102E jmp loc_0_4010CD

·.text:0040102E ; Файл открыт неуспешно, переход к выходу

·.text:00401033; ---------------------------------------------------------------------------

·.text:00401033

·.text:00401033 loc_0_401033:; CODE XREF: main+2Cj

·.text:00401033 mov eax, [ebp+var_14]

·.text:00401033 ; Занесение в регистр EAX указателя на файловый манипулятор psw

·.text:00401036 push eax

·.text:00401036 ; Заталкивание psw в стек

·.text:00401037 push 8

·.text:00401037 ; Заталкивание в стек константы 8

·.text:00401039 lea ecx, [ebp+var_54]

·.text:00401039 ; Занесение в регистр ECX смещения начала буфера var_54

·.text:0040103C push ecx

·.text:0040103C ; Заталкивание его в стек

·.text:0040103D call _fgets

·.text:0040103D ;Вызов fgets( amp;_pass[0],8,psw)

·.text:0040103D ;Буфер var_54 представляет собой _pass

·.text:00401042 add esp, 0Ch

·.text:00401042 ;Балансировка стека

·.text:00401045 push offset aLogin; "Login:"

·.text:00401045 ; Заталкивание в стек смещения строки “Login:”

·.text:0040104A call _printf

·.text:0040104A ;Вызов printf(“Login:”)

·.text:0040104F add esp, 4

·.text:0040104F ; Балансировка стека

·.text:00401052 push offset off_0_407090

·.text:00401052 ; Заталкивание в стек указателя на манипулятор stdin

·.text:00401057 push 0Ch

·.text:00401057 ; Заталкивание в стек константы 0xC

·.text:00401059 lea edx, [ebp+var_10]

·.text:00401059 ; Занесение в регистр EDX указателя на буфер var_10 (user)

·.text:0040105C push edx

·.text:0040105C ; Заталкивание его в стек

·.text:0040105D call _fgets

·.text:0040105D ; Вызов ( amp;user[0],0xC,stdin)

·.text:00401062 add esp, 0Ch

·.text:00401062 ; Балансировка стека

·.text:00401065 push offset aPassw; "Passw:"

·.text:00401065 ; Заталкивание в стек указателя на строку Passw

·.text:0040106A call _printf

·.text:0040106A ; Вызов printf(“Passw:”)

·.text:0040106F add esp, 4

·.text:0040106F ; Балансировка стека

·.text:00401072 push offset off_0_407090

·.text:00401072 ;Заталкивание в стек указателя на манипулятор stdin

·.text:00401077 push 0Ch

·.text:00401077 ; Заталкивание в стек константы 0xC

·.text:00401079 lea eax, [ebp+var_44]

·.text:00401079 ; Занесение в регистр EAX указателя на буфер var_44 (pass)

·.text:0040107C push eax

·.text:0040107C ; Заталкивание его в стек

·.text:0040107D call _fgets

·.text:0040107D ; fgest( amp;pass[0],0xC,stdin)

·.text:00401082 add esp, 0Ch

·.text:00401082 ; Балансировка стека

·.text:00401085 lea ecx, [ebp+var_54]

·.text:00401085 ; Занесение в регистр ECX указателя на буфер var_54 (_pass)

·.text:00401088 push ecx

·.text:00401088 ; Заталкивание его в стек

·.text:00401089 lea edx, [ebp+var_44]

·.text:00401089 ; Занесение в регистр EDX указателя на буфер var_54 (pass)

·.text:0040108C push edx

·.text:0040108C ; Заталкивание его в стек

·.text:0040108D call _strcmp

·.text:0040108D ; Вызов strcmp( amp;_pass[0], amp;pass[0])

·.text:00401092 add esp, 8

·.text:00401092 ; Балансировка стека

·.text:00401095 test eax, eax

·.text:00401095 ; Введен правильный пароль?

·.text:00401097 jz short loc_0_4010B0

·.text:00401097; Переход, если введен правильный пароль

·.text:00401099 lea eax, [ebp+var_44]

·.text:00401099 ; Занесение в регистр EAX указателя на буфер var_44 (pass)

·.text:0040109C push eax

·.text:0040109C ; Заталкивание его в стек

·.text:0040109D push offset aInvalidPasswor; "Invalid password: %s"

·.text:0040109D ; Заталкивание в стек указателя на строку “Invalid password: %s”

·.text:004010A2 lea ecx, [ebp+var_34]

·.text:004010A2 ; Занесение в регистр ECX указателя на буфер var_34 (buff)

·.text:004010A5 push ecx

·.text:004010A5 ; Заталкивание его в стек

·.text:004010A6 call _sprintf

·.text:004010A6 ; Вызов sprintf( amp;buff[0],”Invalid password: %s”, amp;pass[0])

·.text:004010AB add esp, 0Ch

·.text:004010AB; Балансировка стека

·.text:004010AE jmp short loc_0_4010C1

·.text:004010B0; ---------------------------------------------------------------------------

·.text:004010B0

·.text:004010B0 loc_0_4010B0:; CODE XREF: main+97j

·.text:004010B0 push offset aPasswordOk; "Password ok\n"

·.text:004010B0; Заталкивание в стек указателя на строку “Password ok”

·.text:004010B5 lea edx, [ebp+var_34]

·.text:004010B5 ; Занесение в регистр EDX указателя на начало буфера var_34 (buff)

·.text:004010B8 push edx

·.text:004010B8 ; Заталкивание его в стек

·.text:004010B9 call _sprintf

·.text:004010B9 ; Вызов spritnf( amp;buff[0],”Password ok\n”);

·.text:004010BE add esp, 8

·.text:004010BE ; Балансировка стека

·.text:004010C1

·.text:004010C1 loc_0_4010C1:; CODE XREF: main+AEj

·.text:004010C1 lea eax, [ebp+var_34]

·.text:004010C1 ; Занесение в регистр EAX указателя на начало буфера var_34 (buff)

·.text:004010C4 push eax

·.text:004010C4 ; Заталкивание его в стек

·.text:004010C4 ; Состояние стека (жирным шрифтом выделен аргумент функции printf)

·.text:004010C4; -0x04 var_34 (buff)

·.text:004010C4; 0x00 var_54 (_pass)

·.text:004010C4; -0x10 var_44 (pass)

·.text:004010C4; -0x20 var_34 (buff)

·.text:004010C4; -0x40 var_14 (psw)

·.text:004010C4; -0x44 var_10 (user)

·.text:004010C5 call _printf

·.text:004010C5 ; Вызов printf( amp;buff[0])

·.text:004010CA add esp, 4

·.text:004010CA ; Балансировка стека

·.text:004010CD

116
{"b":"837821","o":1}