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


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


Ну, раз, 0xD9, значит, точно float.

 

 

fstp   [esp+0Ch+var_C]

; Стягиваем с вершины стека сопра вещественное значение типа double

; (оно, как мы помним, было занесено туда перед float).

; На всякий случай удостоверяемся в этом, взглянув на опкод команды FSTP.

; Он есть - DD 1C 24. 0xDD – раз 0xDD, значит, действительно, double.

 

fld    [esp+0Ch+var_4]

; Затаскиваем на вершину стека наш float

обратно и…

 

fadd   [esp+0Ch+var_C]

; …складываем его с нашим double. Вот, а еще говорят, что WATCOM C

; оптимизирующий компилятор! Трудно же с этим согласится, раз компилятор

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

 

add    esp, 0Ch

; Освобождаем память, ранее выделенную для локальных переменных

retn

MyFunc       endp

 

dbl_420008      dq 7.77                 ; DATA XREF: main_+A^r

flt_420010      dd 6.6599998            ; DATA XREF: main_+10^r

Листинг 80

 

Настала очередь компилятора Turbo Pascal for Windows 1.0. Наберем в текстовом редакторе следующий пример:

 

USES WINCRT;

 

Procedure MyProc(a:Real);

begin

WriteLn(a);

end;

 

VAR

a: Real;

b: Real;

 

BEGIN

a:=6.66;

b:=7.77;

MyProc(a+b);

END.

 

Листинг 81 Демонстрация передачи вещественных значений компилятором Turbo Pascal for Windows 1.0

 

А теперь, тяпнув с Тигрой пивка для храбрости, откомпилируем его без поддержки сопроцессора (так и происходит с настройками по умолчанию).

 

PROGRAM             proc near

 

call   INITTASK

call   @__SystemInit$qv ; __SystemInit(void)

; Инициализация модуля SYSTEM

 

call   @__WINCRTInit$qv

; __WINCRTInit(void)

; Инициализация модуля WINCRT

 

push   bp

mov    bp, sp

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

 

xor    ax, ax

call   @__StackCheck$q4Word ; Stack overflow check (AX)

; Проверяем есть ли в стеке хотя бы ноль свободных байт

 

mov    word_2030, 0EC83h

mov    word_2032, 0B851h

mov    word_2034, 551Eh

; Инициализируем переменную типа Real.


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



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