Programovanie v assembleri vo Windows x64 (x86-64): Rozdiel medzi revíziami
Smazaný obsah Přidaný obsah
d Preklep: "v registry" nahradené "v registri" Značky: vizuálny editor úprava z mobilu úprava z mobilného webu |
d Opravené preklepy "v registry" na "v registri". Značky: vizuálny editor úprava z mobilu úprava z mobilného webu |
||
Riadok 127:
mov ecx, 0 ; 1. param _In_ UINT uExitCode UINT je 32 bit aj v 64 bitovom prostredi
call ExitProcess
</syntaxhighlight>vynuluje obsah registra ECX a ukončí program. Jediným argumentom funkcie ExitProcess (uložený v
'''Výpis 2''' HelloWorld.s (Verzia pre GAS):<syntaxhighlight lang="gas" line="1">
Riadok 241:
64-bitové verzie funkcií WindowsAPI používajú volaciu konvenciu Microsoft x64.
Prvé štyri argumenty sú uložené v registroch (64-bitová architektúra x86-64 má oproti 32-bitovej architektúre x86 k dispozícii viac registrov). V prípade celočíselných hodnôt (vrátane ukazovateľov), v RCX, RDX, R8 a R9 (v tomto poradí), v prípade argumentov s pohyblivou desatinnou čiarkou v XMM0, XMM1, XMM2, XMM3. Prvý argument je teda uložený buď v
Ďalšie argumenty sa ukladajú do zásobníka v poradí sprava doľava, rovnako ako pri stdcall.
Riadok 340:
</syntaxhighlight>Piaty argument potom samozrejme nie je možné vložiť na požadovanú pozíciu inštrukciou PUSH, ale:<syntaxhighlight lang="nasm" line="1" start="42">
mov qword [rsp+20h], 0 ; 5. param _Inout_opt_ LPOVERLAPPED lpOverlapped
</syntaxhighlight>
add rsp, 28h ; uvolnenie rezervovaneho miesta
</syntaxhighlight>Poslednou zmenou je nahradenie inštrukcie<syntaxhighlight lang="nasm" line="1" start="46">
|