Assembly ile Sistem Fonksiyonu Çağırma [Linux]

06:50 , , , ,


Assembly programı içinden Linux sistem fonksiyonları çağrılırken uyulması gereken standart işlemler vardır. Linux System Call Table 'da görülebileceği gibi hangi register'ları set etmemiz gerektiği, parametreleri hangi register aracılığıyla göndermemiz gerektiği bilinmesi gerekmektedir. 80h kesmesinden sonra hangi fonksiyonun çağrılacağı bu registerlardaki değerler üzerinden belirlenmektedir.


Aşağıdaki örnekte ekrana "Hello world" yazan programı yazacağız:


Yukarıda görüldüğü gibi ;

  • eax'e hangi sistem fonksiyonu yazılacaksa onun numarası 
  • ebx'e birinci parametre olan file descripter değeri -stdout için 1
  • ecx'e yazılacak string'in adresi
  • edx'e ise  kaç karakter yazılacak ise onun uzunluğu girilmelidir.



Gerekli çağırma parametreleri girildikten sonra 80h kesmesiyle kernel mod'a geçiş yapar ve sistem fonksiyonları çağrılır.



Yukarıdaki kod derlenip,link edilip çalıştırıldığında ekrana Hello World yazısı çıkacaktır. Ekrana yazma işini sys_write sistem fonksiyonu ile stdout'a yazarak gerçekleştirilmiştir.