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


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


 

var_8        = qword      ptr -8

; Локальная переменная, занимающая судя по всему 8 байт

 

push   ebp

mov    ebp, esp

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

 

push   401F147Ah

; К сожалению IDA не может представить операнд в виде числа с плавающей запятой

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

; Его тип может быть каким угодно: и int, и указателем

; (кстати, оно очень похоже на указатель).

 

push   0E147AE14h

push   40D51EB8h

; "Черновой" вариант прототипа выглядит так: MyFunc(int a, int b, int c)

 

call   MyFunc

add    esp, 4

; Хвост Тигра! Со стека снимается только одно машинное слово, тогда как

; ложится туда три!

 

fstp   [esp+8+var_8]

; Стягиваем со стека сопроцессора какое-то вещественное число. Чтобы узнать

; какое, придется нажать <ALT-O>, выбрать в открывшемся меню пункт

; "Text representation", и в

нем в окно "Number of opcode bytes" ввести

; сколько знакомест отводится под опкод команд, например, 4.

; Тут же слева от FSTP появляется ее машинное представление - DD 1C 24

; По таблице 10 определяем тип данных с которым манипулирует эта команда.

; Это – double. Следовательно функция возвратила в через стек сопроцессора

; вещественное значение.

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

; принимает в качестве аргументов. Однако, без анализа MyFunc

подтвердить это

; предположение невозможно.

 

push   offset aF    ; "%f\n"

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

; вывести одно вещественное число. Но... при этом мы его не заносим в стек!

; Как же так?! Прокручиваем окно дизассемблера вверх, параллельно с этим

; обдумывая все возможные пути разрешения ситуации.

; Внимательно рассматривая команду "FSTP [ESP+8+var_8]" попытаемся вычислить

; куда же она помещает результат своей работы.

; IDA

определила var_8 как "qword ptr

–8", следовательно [ES+8-8] эквивалентно




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



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