Tam Sürümünü Görmek İçin : parametreleri tersten stack'a atmak
http://sourtimes.org/show.asp?t=varargs:
"cdecl ve stdcall'un parametreleri tersten (sagdan sola) push etmesinin sebebidir. bu sayede fix parametrelere eri$im ofseti hep ayni olur (ebp+8 gibin). bu kainat i$te boyle mukemmel bir duzen uzerine yaratilmi$tir."
"bu sayede fix parametreleri erişim ofseti aynı olur" ifadesini tam olarak çözemedim.
Yardımcı olacaklara şimdiden teşekkur ederim.
ofset dediği belki FILO ( First Input Last Output) olabilir yani ilk gelen son çıkar
myavuzselim
16/04/2006, 18:19
Offset bir referans noktasina gore birseyi ne kadar kaydirdiginizi belirler bildigim kadariyla. Yukaridaki ornekte offset 8.
sanirim soyle birsey kastedilmis (emin degilim):
mesela parametreler sagdan sola stack'e push ediliyor olsun.
printf("%d%s", 3, "test") cagrildiginda stack yaklasik soyle birsey oluyor:
"test"
3
"%d%s"
-ebp-
<printf fonksiyonunun alani>
veya printf("Merhaba") :
"merhaba"
-ebp-
<printf fonksiyonunun alani>
printf fonksiyonu ilk parametreyi bulmak icin ebp+1 yapar (ebp'nin ustundeki deger).
Ama soldan saga push edilirse:
printf("%d%s", 3, "test") :
"%d%s"
3
"test"
-ebp-
<printf fonksiyonunun alani>
printf("Merhaba") :
"merhaba"
-ebp-
<printf fonksiyonunun alani>
Simdi ilk parametre ebp+k diye bulunamiyor, cunku arada ne kadar vararg oldugunu bilmiyoruz.
tesekkur ederim yavuzselim ama ne demek istediğini inan anlamadım.Neyi göremiyorum acaba.
myavuzselim
16/04/2006, 23:19
Ben anlatamamisimdir.
Bir de bunu anlamak icin biraz assembly, veya stack nedir nasil isler bilmek gerekiyor (sadece biraz. Benim assembly bilgim de cok sayilmaz).
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.