Скомпилированный код сборки x86 gcc: поведение fastcall

Я работаю над некоторыми x86 задачи анализа программы сборки, и я пытаюсь выяснить поведение fastcall.

Хотя на 32-bit x86 платформа, стек определяется для передачи параметров функции в вызывающем преобразовании. Тем не менее, я заметил, что многие вызовы функций действительно используют два регистра, eax а также edx передать первые два параметра функции.

Например, вот (упрощенный) пример, найденный в libgcrypt 1.6.1:

  mov  0x24(%esp), %eax
  ...
  mov  0x1c(%esp), %edx
  call mul_n
  ...
mul_n:
  ...
  mov  %eax, 0x20(%esp)
  mov  %edx, 0x24(%esp)

Как видите, зарегистрируйтесь eax а также edx используются для передачи параметров. Мое наблюдение заключается в том, что эти два регистра всегда используются для передачи первых двух параметров.

Обратите внимание, что я использую gcc скомпилировать код. Тем не менее, я могу только найти fastcall определение Microsoft компилятор, который использует регистр ecx (не eax !) и edx передать параметры.

Итак, вот мой вопрос: есть ли четкое определение такого gcc оптимизация? Я просто не могу найти информативные источники...

0 ответов

Другие вопросы по тегам