Фундаментальные основы хакерства



         

Идентификация значения, возвращаемого функцией - часть 23


; не используется, можно предположить, что она возвращает его не через

; регистры, а в переменной var_74. Но это не более чем предположение

push   offset unk_406044

call   _printf

add    esp, 8

; Вызов

функции printf

push   777h

; Передача функции Sum значения 0x777 типа int

push   666h

; Передача функции Sum значения 0x666 типа int

call   Sum

add    esp, 8

; Вызов

функции Sum

push   eax

; В регистре EAX содержится возращенное функцией Sum

значение

; Передаем его функции printf в качестве аргумента

push   offset unk_406048

call   _printf

add    esp, 8

; Вызов

функции printf

mov    esp, ebp

pop    ebp

; Закрытие кадра стека

retn

main         endp

; int __cdecl Reverse_1(char *,int)

; Обратите внимание, что прототип функции определен неправльно!

; На самом деле, как мы уже установили из анализа вызывающей функции, он выглядит так:

; Reverse(char *dst, char *src)

; Название аргументов дано на основании того, что левый аргумент – указатель

; на неинициализированный буфер и, скорее всего, он выступает в роли приемника,

; соответственно, правый аргумент в таком случае – источник.

Reverse_1    proc near           ; CODE XREF: main+32p

arg_0        = dword      ptr  8

arg_4        = dword      ptr  0Ch

push   ebp

mov    ebp, esp

; Открываем кадр стека

mov    eax, [ebp+arg_4]

; Загружаем в EAX значение аргумента arg_4

push   eax

; Передаем arg_4 функции strcpy

mov    ecx, [ebp+arg_0]

; Загружаем в ECX значение аргумента arg_0

push   ecx

; Передаем arg_0 функции strcpy

call   strcpy

add    esp, 8

; Копируем содержимое строки, на которую указывает arg_4, в буфер

; на который указывает arg_0

mov    edx, [ebp+arg_0]

; Загружаем в EDX содержимое аргумента arg_0, указывающего на буфер,

; содержащий только что скопированную строку

push   edx          ; char *

; Передаем функции __strrev arg_0




Содержание  Назад  Вперед