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


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


; вывод приходилось помещать в обработчик сообщения WM_PAINT.

; Turbo Pascal

же позволяет обращаться к Windows-окном точно так,

; как с консолью. А раз так – он должен где-то хранить все, ранее выведенное

; на экран. Поскольку, локальный переменные умирают вместе с завершением

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

; сегмент данных. Pascal использует последнее – указатель на такой буфер мы

; только что получили.

; Далее, для повышения производительности вывода Turbo-Pascal реализует

; простейший

кэш. Функции WriteLingint, WriteChar, WriteString сливают

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

; следует вызов WriteLn, выводящий содержимое буфера в окно.

; Run-time systems следит за его перерисовками и при необходимости повторяет

; вывод уже без участия программиста.

 

push   ds

push   di

; Заносим адрес буфера в стек

 

mov    al, [bp+arg_4]

; Тип аргумента arg_4 - Byte

 

xor    ah, ah

; Обнуляем старший байт регистра ah

 

add    ax, [bp+arg_6]

; Складываем arg_4 с arg_6. Поскольку, al было предварительно расширено до AX

; то arg_6 имеет тип Word, т.к. при сложении двух чисел разного типа PASCAL

; расширяет их до большего из них.

; Кроме того, вызывающая процедура передает с этим аргументом значение 0x666,

; что явно не влезло бы в Byte.

 

xor    dx, dx

; Обнуляем DX…

 

push   dx

; …и заносим его в стек.

 

push   ax

; Заносим в стек сумму двух левых аргументов

 

push   0

; Еще один ноль!

 

call   @Write$qm4Text7Longint4Word ; Write(var f; v: Longint; width: Word)

; Функция WriteLongint имеет следующий прототип

; WriteLongint(Text far &, a: Longint, count:Word); где -

; Text far & - указатель на буфер вывода

; a          - выводимое длинное целое

; count             - сколько переменных выводить (ноль – одна переменная)

;

; Значит, в нашем случае мы выводим одну переменную – сумму двух аргументов.




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



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