PDA

Tam Sürümünü Görmek İçin : parametreleri tersten stack'a atmak


serimc
16/04/2006, 10:48
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.


keramet
16/04/2006, 17:46
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.

serimc
16/04/2006, 23:04
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).