Calling conventions: cdecl, stdcall en System V
Vergelijk de belangrijkste x86-calling conventions, zodat uw assembly- en C-code overeenkomen over waar argumenten terechtkomen, wie de stack opruimt en welke registers behouden blijven.
Calling conventions: cdecl, stdcall en System V is een gratis Assemblytaal en x86-programmeren voor systemen op laag niveau-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Assemblytaal en x86-programmeren voor systemen op laag niveau. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Assemblytaal en x86-programmeren voor systemen op laag niveau bevat in totaal 4 lessen.
Waarom conventies belangrijk zijn
Om assembly en C te laten samenwerken, moeten beide kanten dezelfde aanroepconventie gebruiken: hoe argumenten worden doorgegeven, wie de stack opruimt en welke registers behouden moeten blijven.
Argumenten doorgeven
Conventies verschillen in waar argumenten terechtkomen: op de stack, in registers of een combinatie daarvan. Als je dit verkeerd doet, raken gegevens ongemerkt beschadigd.
cdecl
cdecl (32-bits, de standaard voor C) plaatst argumenten van rechts naar links op de stack en de aanroeper ruimt ze na de aanroep op.
push arg2
push arg1
call func
add esp, 8 ; caller cleansstdcall
stdcall geeft argumenten ook van rechts naar links via de stack door, maar de aangeroepene ruimt de stack op met ret n. De Win32 API gebruikt deze conventie.
ret 8 ; callee cleans 8 bytesOpruimen door aanroeper versus aangeroepene
Het belangrijkste verschil:
- cdecl: de aanroeper ruimt op en functies met variabele argumenten worden ondersteund
- stdcall: de aangeroepene ruimt op, waardoor aanroeppunten kleiner zijn
System V AMD64
De 64-bitsconventie van Linux/macOS geeft de eerste zes gehele getalargumenten door in registers: RDI, RSI, RDX, RCX, R8, R9; extra argumenten komen op de stack.
mov rdi, arg1
mov rsi, arg2
call funcMicrosoft x64
64-bits Windows gebruikt een andere registersset: RCX, RDX, R8, R9 voor de eerste vier argumenten, plus 32 bytes schaduwruimte.
Retourwaarden
Resultaten van gehele getallen en pointers komen terug in EAX (32-bits) of RAX (64-bits); drijvende-kommaresultaten gebruiken XMM0 in 64-bitsconventies.
Behouden versus tijdelijke registers
Elke conventie wijst door de aangeroepene behouden registers aan (de aangeroepene moet ze herstellen) en door de aanroeper behouden registers (die zonder problemen mogen worden overschreven). Als je deze regel schendt, raakt de aanroeper beschadigd.
Stackuitlijning
System V vereist dat de stack bij een call op 16 bytes is uitgelijnd. Als je dit vergeet, crasht code die SSE-instructies gebruikt.
Afstemmen op de compiler
Declareer functies aan de C-kant altijd met het overeenkomende conventieattribuut (bijvoorbeeld __stdcall), zodat beide helften dezelfde afspraken gebruiken.
Korte controle
Test je begrip van aanroepconventies.
Samenvatting
Je hebt aanroepconventies geleerd:
- cdecl: argumenten op de stack, de aanroeper ruimt op, variabele argumenten worden ondersteund
- stdcall: argumenten op de stack, de aangeroepene ruimt op
- System V x64: argumenten in RDI,RSI,RDX,RCX,R8,R9
- Retourwaarden in EAX/RAX; behoud registers en uitlijning volgens de conventie
Leer Assembly met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Calling conventions: cdecl, stdcall en System V” gratis?
Ja — de volledige tekst van “Calling conventions: cdecl, stdcall en System V” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Assemblytaal en x86-programmeren voor systemen op laag niveau wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Assemblytaal en x86-programmeren voor systemen op laag niveau bevat in totaal 4 lessen.
Wat leer ik in “Calling conventions: cdecl, stdcall en System V”?
Vergelijk de belangrijkste x86-calling conventions, zodat uw assembly- en C-code overeenkomen over waar argumenten terechtkomen, wie de stack opruimt en welke registers behouden blijven. Je oefent met Assemblytaal en x86-programmeren voor systemen op laag niveau door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Assemblytaal en x86-programmeren voor systemen op laag niveau te beginnen?
Ervaring vooraf is niet nodig. Assemblytaal en x86-programmeren voor systemen op laag niveau op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Calling conventions: cdecl, stdcall en System V”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Assemblytaal en x86-programmeren voor systemen op laag niveau?
Ja. Elke les over Assemblytaal en x86-programmeren voor systemen op laag niveau bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Assembly vanuit C aanroepen
- C vanuit Assembly aanroepen
- Technieken voor programmeren in meerdere talen
- Calling conventions: cdecl, stdcall en System V