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


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


; Т.е. это явно не char, но и не указатель (2-странное значение для указателя)

 

mov    cl, 1

; Через cl передается первый слева аргумент типа char

;(лишь у переменных типа char размер 8 бит)

;

 

call   MyFunc

; Уже можно восстановить прототип функции MyFunc(char, int, int, int)

; Да, мы ошиблись и тип long int приняли за int, но, поскольку в компиляторе

; Microsoft Visual C++ эти типы идентичны, такой ошибкой можно пренебречь

 

push   eax

; Передаем полученный результат функции printf

 

push   offset asc_406030 ; "%x\n"

call   _printf

add    esp, 8

 

xor    eax, eax

pop    ebp

retn

main         endp

 

 

MyFunc       proc near           ; CODE XREF: main+Ep

 

var_8        = dword      ptr -8

var_4        = byte ptr –4

 

arg_0        = dword      ptr  8

arg_4        = dword      ptr  0Ch

; Через стек функции передавались лишь два аргумента и их успешно распознала IDA

 

push   ebp

mov    ebp, esp

sub    esp, 8

; Резервируем 8 байт для локальных переменных

 

mov    [ebp+var_8], edx

; Регистр EDX не был явно инициализирован до того загрузки в

; локальную переменную var_8. Значит, он используется для передачи аргументов!

; Поскольку эта программа была скомпилирована компилятором Microsoft Visual C,

; а он, как известно, передает аргументы в регистрах ECX:EDX можно сделать

; вывод, что мы имеем дело со вторым, считая слева, аргументом функции

; и где-то ниже по тексту нам должно встретиться обращение к ECX

– первому

; слева аргументу функции.

; (хотя не обязательно – первый аргумент функцией может и не использоваться)

 

mov    [ebp+var_4], cl

; Действительно, обращение к CL не заставило должно себя ждать. Поскольку,

; через CL передается тип char, то, вероятно, первый аргумент функции – char.

; Некоторая неуверенность вызвана тем, что функция может просто обращаться

; к младшему байту аргумента типа int, скажем.

; Однако, посмотрев на код вызывающей функции, мы можем убедиться, что




- Начало -  - Назад -  - Вперед -



Книжный магазин