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


Идентификация аргументов функций - часть 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

 

--

<


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



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