← Back to list

Tersine Mühendislik-Calling Conventions-1-

Fonksiyon Parametreleri (Assembly’de neyi ifade eder, nasıl gözükür?)

Ege · 2024-09-10 09:39 · 11 claps · 2.8 min read
#cybersecurity #assembly #reverse-engineering #32-bit #malware-analysis
Open on Medium ↗
Wiki topics: 🔒 · Cybersecurity

Tersine Mühendislik-Calling Conventions-1-

Fonksiyon Parametreleri (Assembly’de neyi ifade eder, nasıl gözükür?)

Fonksiyonlar çalıştırılırken parametreler genellikle stack üzerinden ya da register’lar aracılığıyla taşınır. Parametrelerin taşınma yöntemi mimariye ve calling convention’a bağlıdır. Tersine mühendislik yaparken kodumuzun neye assembly’de neyi ifade ettiğine bakıyoruz. Bu örneklerde de detaylı incelemek için IDA Freeware ile analiz edeceğiz yazdıklarımızı.

Parametreler stack’e push talimatı ile gönderilir. Stack'e yerleştirilen parametreler, fonksiyon çağrıldığında oradan çekilir.

include <stdio.h>

int add(int a, int b) {

return a + b;

}

int main() {

int result = add(5, 3);

printf(“The sum of 5 and 3 is: %d\n”, result);

return 0;

}

Bu C kodunu analiz edelim öncelikle.

  • esp ile adreslenen stack parametreleri, genellikle doğrudan fonksiyon parametrelerini stack'e koyma yöntemidir. Bu yöntem daha hızlı olabilir ve derleyicinin parametreleri yönetmesi için daha verimli bir yol sunabilir.
  • ebp ile adreslenen değişkenler, daha düzenli ve izlenebilir bir yapı sağlar. Bu yapı, özellikle debugging aşamasında ve optimizasyon yapılmadığında kullanışlıdır
  • 16-bit sistemlerde: Stack pointer (SP) 2 byte azalır.
  • 32-bit sistemlerde: Stack pointer (ESP) 4 byte azalır.
  • 64-bit sistemlerde: Stack pointer (RSP) 8 byte azalır.

PUSH EAX ; EAX registerındaki değeri stack’e ekler

şimdi IDA Freeware’dan incelediğimizde önceden açıkladığım bilgide stack pointerlerın 32 bitte 4 azalıp arttığını belirtmiştim. Arasında 4 bit değer olması gerektiği için biri esp biri esp+4 olarak gözükmektedir. her bir parametrenin stack’te 4 byte (1 dword) alan kaplamasıdır.

Mavi yuvarlağa aldığım kısım Fonksiyon girişidir stack hazırlığı diyebiliriz.

push ebp , base pointer(ebp) değerini stack’e kaydeder. Çerçeve oluşturur

mov ebp,esp — esp’ye ebp atanır yani şuan esp’de ne yazıyorsa ebp’ye atanır.

and esp, 0FFFFFFF0h — bu da 16-byte ‘a hizalamak için kullanılıyor.

sub esp,20h local değişiklik ve parametreler için yer açılır

— — — — — — — — — — — — — — — — — — — —

Kırmızı alana baktığımızda

şimdi IDA Freeware’dan incelediğimizde önceden açıkladığım bilgide stack pointerlerın 32 bitte 4 azalıp arttığını belirtmiştim. Arasında 4 bit değer olması gerektiği için biri esp biri esp+4 olarak gözükmektedir. her bir parametrenin stack’te 4 byte (1 dword) alan kaplamasıdır.

mov dword ptr [esp+4], 3

mov dword ptr [esp], 5

— — — — — — — — — — — — —

call add fonksiyonunu inceleyelim, çift tıklayarak o fonksiyona geçiyoruz.

mov edx, [ebp+arg_0]: ebp+8'deki değer alınarak edx kaydedicisine yükler.Bu, ilk parametre olan arg_0'dır (stack'te 8 byte uzaklıkta)

mov eax, [ebp+arg_4]: ebp+12'deki değer alınarak eax kaydedicisine yükler. Bu, ikinci parametre olan arg_4'tür. 12 byte uzaklıkta.

birini edx birini eax’e yüklediğimize göre add eax ,edx yaptığımızda arg_0 ile arg_4 tü toplarız.

— — —

Şimdi main fonksiyonumuza dönelim.

mov [esp+1Ch], eax bir önceki satırda çağırdığımız call fonksiyonununda dönen değer eax’idi. bir alana kaydetmek için.

mov eax, [esp+1Ch] bu da tekrar değeri yükler eax’e.

— — — — — — -

mov [esp+4], eax — sonuç eax ten alınıp printf için hazırlanır.

Stack’in başına format stringi yerleştirilir. mov dword ptr [esp]

call _printf printf çağrılır ekrana basar.

— — — — — —

Fonksiyonun sonuna ve çıkışa geldik.

mov eax,0 — Fonksiyonun dönüş değeri olur 0 ı eax’e koyar.

Bu örnek temelden başlamamız assembly’de fonksiyonların ve programın neye göre çalıştığını gösteren basit bir örnekti. Umarım faydalı bir yazı olmuştur. Hatalı olduğumu düşündüğünüz , eklemem gereken bir bilgi veya geri bildirimleriniz benim için çok değerli linkedin hesabımdan iletişime geçebilirsiniz. İyi okumalar.


메타데이터
post_id
ae2d2b3c6b93
slug
tersine-mühendislik-ae2d2b3c6b93
url
https://medium.com/@ege.ka/tersine-m%C3%BChendislik-ae2d2b3c6b93
canonical_url
https://medium.com/@ege.ka/tersine-m%C3%BChendislik-ae2d2b3c6b93
author_url
https://medium.com/@ege.ka
status
ok
fetched_at
2026-06-16 19:09:56