Yığın ve Çağrı Kuralları
İşlevlerin bağımsız değişkenleri nasıl aktardığını, dönüş değerlerini nasıl döndürdüğünü ve yığın çerçevesini nasıl yönettiğini daha derinlemesine öğrenin; bu bilgi, derlenmiş kodu okunabilir hâle getirir.
Yığın ve Çağrı Kuralları, CoddyKit'te ücretsiz bir Reverse Engineering & Binary Analysis Basics dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Reverse Engineering & Binary Analysis Basics öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Reverse Engineering & Binary Analysis Basics kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Beyond a Single Call
You can read basic x86/x64 instructions and follow control flow. To truly understand function calls you must know the stack and calling conventions.
These rules govern how arguments arrive and how cleanup happens.
What the Stack Is
The stack is a region of memory that grows downward (toward lower addresses). It stores return addresses, saved registers, and local variables.
pushdecrements RSP and writespopreads and increments RSP
push rax ; rsp -= 8, [rsp] = rax
pop rbx ; rbx = [rsp], rsp += 8RSP and RBP
Two registers track the stack:
- RSP (stack pointer) points to the current top
- RBP (base pointer) anchors the current frame
Locals are addressed relative to RBP, like [rbp-8].
The Function Prologue
Most functions begin with a prologue that sets up the frame: save the old base pointer, then point RBP at the new frame.
push rbp
mov rbp, rsp
sub rsp, 0x20 ; reserve 32 bytes for localsThe Function Epilogue
The epilogue reverses the prologue, restoring the caller's frame before returning.
mov rsp, rbp
pop rbp
retCalling Conventions
A calling convention is the contract for passing arguments and returning values.
- Where arguments go (registers or stack)
- Who cleans up the stack
- Which registers must be preserved
System V AMD64 (Linux x64)
On Linux x64 the first six integer arguments go in registers: rdi, rsi, rdx, rcx, r8, r9. The return value comes back in rax.
Extra arguments spill onto the stack.
; foo(1, 2, 3)
mov edi, 1
mov esi, 2
mov edx, 3
call fooMicrosoft x64 Convention
Windows x64 uses different registers: the first four arguments go in rcx, rdx, r8, r9, and the caller reserves 32 bytes of shadow space.
Recognizing the OS tells you which mapping to apply when reading arguments.
; Windows: bar(a, b)
mov rcx, a
mov rdx, b
sub rsp, 0x28 ; shadow space + alignment
call barCaller-Saved vs Callee-Saved
Some registers may be clobbered by a call (caller-saved), others must be preserved (callee-saved).
Seeing a function push rbx, rbp, and r12-r15 in its prologue is a strong hint about which registers it intends to use.
Reading Arguments in Practice
When you land in a function, mapping registers to arguments lets you label them. If the code reads rdi first on Linux, that is argument one.
This is how raw disassembly becomes readable pseudocode like send(sock, buf, len).
Stack-Passed Arguments
When a function has more arguments than the convention allows in registers, the extras are pushed onto the stack by the caller. The callee reads them at positive offsets from RBP, like [rbp+0x10].
Spotting these accesses helps you recover the full argument list.
; 7th System V argument
mov rax, [rbp+0x10]Quick Check
Under the System V AMD64 convention, which register holds the FIRST integer argument?
Recap
You can now decode function calls at the metal level:
- Stack grows down; RSP tops it, RBP anchors the frame
- Prologue/epilogue set up and tear down frames
- Calling conventions map registers to arguments (System V vs Microsoft x64)
This turns opaque disassembly into recognizable function signatures.
Sıkça Sorulan Sorular
“Yığın ve Çağrı Kuralları” dersi ücretsiz mi?
Evet — “Yığın ve Çağrı Kuralları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Reverse Engineering & Binary Analysis Basics kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Reverse Engineering & Binary Analysis Basics kursu toplamda 4 dersten oluşur.
“Yığın ve Çağrı Kuralları” dersinde ne öğreneceğim?
İşlevlerin bağımsız değişkenleri nasıl aktardığını, dönüş değerlerini nasıl döndürdüğünü ve yığın çerçevesini nasıl yönettiğini daha derinlemesine öğrenin; bu bilgi, derlenmiş kodu okunabilir hâle ge… Reverse Engineering & Binary Analysis Basics ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Reverse Engineering & Binary Analysis Basics öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Reverse Engineering & Binary Analysis Basics, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Yığın ve Çağrı Kuralları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Reverse Engineering & Binary Analysis Basics dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Reverse Engineering & Binary Analysis Basics dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- x86/x64 Assembly Temelleri
- Yazmaçlar ve Bellek İşlemleri
- Denetim Akışı ve İşlev Çağrıları
- Yığın ve Çağrı Kuralları