Архитектура x86-64 под скальпелем ассемблерщика

         

битную версию Windows мало чем


Программирование под 64- битную версию Windows мало чем отличается от традиционного, только все операнды и адреса по умолчанию 64-разярные, а параметры API-функций передаются через регистры, а не через стек. Первые четыре аргумента всех API-функций передаются в регистрах RCX, RDX, R8 и R9 (регистры перечислены в порядке следования аргументов, крайний левый аргумент помещается в RCX). Остальные параметры кладутся на стек. Все это называется x86-64 fast calling conversion (соглашение о быстрой передаче параметров для x86-64), подробное описание которой можно найти в статье "The history of calling conventions, part 5 amd64" (http://blogs.msdn.com/oldnewthing/archive/2004/01/14/58579.aspx). Так же нелишне заглянуть на страничку бесплатного компилятора Free PASCAL и поднять документацию по способам вызова API: http://www.freepascal.org/wiki/index.php/Win64/AMD64_API.

В частности, вызов функции с пятью аргументами API_func(1,2,3,4,5) выглядит так:

       mov    dword ptr [rsp+20h], 5     ; кладем на стек пятый слева аргумент

       mov    r9d, 4                     ; передаем четвертый слева аргумент

       mov    r8d, 3                     ; передаем третий слева аргумент

       mov    edx, 2                     ; передаем второй слева аргумент

       mov    ecx, 1                      ; передаем первый слева аргумент

       call   API_func


Содержание раздела