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



         

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


тип

предпочтения

char

AL

DL

BL

int

AX

DX

BX

long int

DX:AX

ближний указатель

BX

AX

DX

дальний указатель

stack

float

stack

double

stack

Таблица 3 Порядок предпочтений Microsoft C++ 6.x при передаче аргументов по соглашению fastcall

::Borland C++ 5.x – очень похож на своего предшественника – компилятор Borland C++ 3.x, за исключением того, что вместо регистра BX отдает предпочтение регистру CX, и аргументы типа int и long int помещает в любой из подходящих 32-разрядных регистров, а не DX:AX. Как, впрочем, и следовало ожидать при переводе компилятора с 16- на 32-разрядный режим.

тип

предпочтения

char

AL

DL

CL

int

EAX

EDX

ECX

long int

EAX

EDX

ECX

ближний указатель

EAX

EDX

ECX

дальний указатель

stack

float

stack

double

stack

Таблица 4 Порядок предпочтений Borland C++ 5.x при передаче аргументов по соглашению fastcall

::Microsoft Visual C++ 4.x – 6.x: при возможности передает первый слева аргумент в регистре ECX, второй – в регистре EDX, а все остальные через стек. Вещественные значения и дальние указатели всегда передаются через стек. Аргумент типа __int64 (нестандартный тип, 64-разрядное целое, введенный Microsoft) всегда передается через стек.

Если __int64 – первый слева аргумент, то второй аргумент передается через ECX, а третий – через EDX. Соответственно, если __int64 – второй аргумент, то первый передается через ECX, а третий – через EDX.

тип

предпочтения

char

CL

DL

--

int

ECX

EDX

--

__int64

stack

long int

ECX

--

ближний указатель

ECX

EDX

--

дальний указатель

stack

--

float

stack

--

double

stack

--

<


Содержание  Назад  Вперед