Шаг 121.
Функции и процедуры

    На этом шаге мы рассмотрим вызов подпрограмм.

    Функции и процедуры идентифицируются достаточно просто. Структуру вызова и внутреннюю часть процедур вы уже хорошо знаете. Остается только напомнить некоторые положения.

    Приведем небольшую программу на C++, содержащую обращение к функции:

#include<iostream.h>
void main()
{
  int x;
  long cube (int);
  cout << "Задайте число: ";
  cin >> x;
  cout << "Его куб: " << cube (x);
}

long cube (int i)
{
  return i*i*i;
}
Текст этой программы можно взять здесь.

    На рисунке 1 представлено начало этой программы в IDA PRO:


Рис.1. Дизассемблированная программа

    Вызов процедуры:

  PUSH par1 
  PUSH par2 
  PUSH раг3 
  CALL 232343

    Здесь все достаточно просто. Главное - распознать параметры и понять порядок помещения их в стек. Надо также иметь в виду, что существует протокол передачи параметров через регистры. После вызова процедуры может стоять команда очистки стека ADD ESP,N.

    Не забывайте, что функции возвращают результат через регистр ЕАХ. Это может помочь вам быстро разобраться в назначении функции.

    На следующем шаге мы рассмотрим оптимизацию кода.




Предыдущий шаг Содержание Следующий шаг