Ваш фрагмент кода похож на код записи , используемый некоторыми процессорами и компиляторами. код ввода - это код сборки, который выдает компилятор при вводе функции.
Код записи отвечает за сохранение параметров функции и выделение места для локальных переменных и, при необходимости, их инициализацию. Код входа использует указатели на область хранения переменных. Некоторые процессоры используют комбинацию регистров EBP и ESP для указания местоположения локальных переменных (и параметров функции).
Поскольку компилятор знает, где хранятся переменные (и параметры функции), он удаляет имена переменных и использует числовое индексирование. Например, строка:
movl 8(%ebp), %eax
либо переместит содержимое 8-й локальной переменной в регистр EAX
, либо переместит значение на 8 байтов от начала локальной области (при условии, что указатели регистра EBP
на начало локальной переменной) область).
Инструкция:
subl $24, %esp
подразумевает, что компилятор резервирует 24 байта в стеке. Это может быть для защиты некоторой информации в соглашении о вызовах функций. Функция могла бы использовать область после этого для собственного использования. Эта зарезервированная область может содержать параметры функции.
Фрагмент кода, который вы указали, выглядит так, будто сравнивает две локальные переменные внутри функции:
void Unknown_Function(long param1, long param2, long param3)
{
unsigned int local_variable_1;
unsigned int local_variable_2;
unsigned int local_variable_3;
if (local_variable_2 < local_variable_3)
{
//...
}
}
Попробуйте разобрать вышеуказанную функцию и посмотрите, насколько близко она соответствует вашему фрагменту кода.