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


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


 

 

MyFunc       proc near           ; CODE XREF: _main+11p

 

arg_0        = dword      ptr  8

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

 

push   ebp

mov    ebp, esp

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

 

movsx  eax, al

; Borland

сгенерировал более оптимальный код, чем Microsoft, не помещая

; регистр в локальную переменную и экономя тем самым память. Впрочем, если бы

; был задан соответствующий ключ оптимизации, Microsoft Visual C++ поступил

; точно так же.

; Обратите внимание еще и на то, что Borland

обрабатывает аргументы

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

; в то время как Microsoft Visual C++ поступает наоборот.

 

add    edx, eax

add    ecx, edx

; Регистры EDX и CX не были инициализированы, значит, в них функции были

; переданы аргументы.

 

mov    edx, [ebp+arg_0]

; Загружаем в EDX последний аргумент функции, переданный через стек…

 

add    ecx, edx

; …складываем еще раз

 

mov    eax, ecx

; Передаем в EAX (в EAX функция возвращает результат своего завершения)

 

pop    ebp

retn   4

; Вычищаем за собой стек

 

MyFunc        endp

Листинг 72

Наконец, результат компиляции WATCOM C должен выглядеть так:

 

main_        proc near           ; CODE XREF: __CMain+40p

push   18h

call   __CHK

; Проверка стека на переполнение

 

push   ebx

push   esi

push   edi

; Сохраняем регистры в стеке

 

mov    ebx, 4

mov    edi, 3

mov    esi, 2

mov    eax, 1

; Смотрите, аргументы передаются через те аргументы, которые мы указали!

; Более того, отметьте, что первый аргумент типа char

передается через

; 32-разрядный регистр EAX! Такое поведение WATCOM-а чрезвычайно

; затрудняет восстановление прототипов функций! В данном случае присвоение

; регистрам значений происходит согласно порядку объявления аргументов

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

 

call   MyFunc

 

push   eax




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



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