Linux Assembly Programlamaya Giriş

Benzer belgeler
C İLE BUFFER OVERFLOW-2

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

CSD İŞLETİM SİSTEMİNDE SİSTEM FONKSİYONLARININ ÇAĞIRILMASI

PROGRAMLAMAYA GİRİŞ DERS 2

BİL 220 Sistem Programlamaya Giriş

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Bölüm 3: Adresleme Modları. Chapter 3: Addressing Modes

Dr. Fatih AY Tel: fatihay@fatihay.net

Hafta 13 Fonksiyonlar

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

Biçem Belirteçleri (Format Specifiers)

BİL-142 Bilgisayar Programlama II

Sınav tarihi : Süre : 60 dak.

mikroc Dili ile Mikrodenetleyici Programlama Ders Notları

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Karma C/C + + Kodlama

MİKROBİLGİSAYAR SİSTEMLERİ. Teknik Bilimler Meslek Yüksekokulu

Bilgisayar Sistemlerine Genel Bakış

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

1.1. Yazılım Geliştirme Süreci

ALGORİTMA VE PROGRAMLAMA II

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

int faktoriyel(int sayi) { int sonuc = 1; for(int i=sayi;i>0;i--) sonuc*=i; return sonuc; } int main() { int sayi = faktoriyel(5); }

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

BBM 341 Sistem Programlama

BM-311 Bilgisayar Mimarisi

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

Bölüm 9. Altprogramlar ISBN

Nesne Yönelimli Programlama

C PROGRAMLAMA DİLİNE GİRİŞ

C PROGRAMLAMA D İ L İ

Dr. Fatih AY Tel: fatihay@fatihay.net

Adresleme Modları. Mikroişlemciler ve Mikrobilgisayarlar

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Assembly Dili Nedir? Assembly dili biliyorum derken hangi işlemci ve hangi işletim sistemi için olduğunu da ifade etmek gerekir.

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Bilgisayar Programlama. 1.Hafta

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Hacettepe Robot Topluluğu

Programlama Dillerinde Kullanılan Veri Tipleri

Bigisayar Programlama

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Mikroişlemcili Sistemler ve Laboratuvarı 8.Hafta

C Programlama printf() Fonksiyonu

Programlama Dilinin Özellikleri

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

8. İŞARETCİLER (POINTERS)

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

C Dersi Bölüm 1. Bilgisayar Donanımı

8086 Mikroişlemcisi Komut Seti

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

BİL-141 Bilgisayar Programlama I (Java)

Linux'ta Kabuk ve Kabuk Programlama

Yrd. Doç. Dr. Caner ÖZCAN

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Lambda İfadeleri (Lambda Expressions)

Timer İle arka plan renk değişimi

Bölüm 2 - C ile Programlamaya Giriş

C Programlama Dilininin Basit Yapıları

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Yazılım Mühendisliğine Giriş 2018 GÜZ

Dr. Fatih AY Tel:

Yrd. Doç. Dr. Caner ÖZCAN

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

ELN1001 BİLGİSAYAR PROGRAMLAMA I

C Programlama Dili'ne Giriş

11- FONKSİYONLAR (FUNCTIONS)

Bir C programı C fonksiyonlarından oluşur. Bunlar arasında main() adı verilen ana fonksiyon daima olmalıdır. C fonksiyonları programı oluşturan

ALGORİTMA VE PROGRAMLAMA I DERS#3

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

LABORATUVAR ÇALIŞMASI 1 - Python a Giriş

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Giriş. ENF102 Jeoloji

Python Programlama Dili

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

3.1 Pointer in Yararları

DERS 5 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 bacak bağlantıları PIC 16F84 bellek yapısı Program belleği RAM bellek Değişken kullanımı Komutlar

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR

Proses. Prosesler 2. İşletim Sistemleri

Bölüm 10. Altprogramları Uygulamak

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR

MTM 305 MĠKROĠġLEMCĠLER

Basit Bootstrap Uygulaması

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

JAVA API v2.0 Belge sürümü: 2.0.2

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

Derleme Make Hata Ayıklama

Transkript:

Linux Assembly Programlamaya Giriş Barış Metin <baris@metin.org> <baris.metin@frontsite.com.tr>

Konular gcc / gas / ld Intel ve AT&T söz dizimleri gdb INT 80H C kütüphane fonksiyonları Stack Frame Örnek sistem çağrıları Örnek kütüphane fonksyonları

gcc GNU Compiler Collection gcc, orkestra şefi Assembly yazmak için neden bir C derleyicisi? Linux bir C dünyasıdır! Linux'un çoğu ve işlevsel assembly programları oluşturmak için kullanılabilecek kütüphaneler C ile gcc için yazılmıştır. gcc yalnızca programları derlemez, inşa eder!

gcc: inşa etme işlemi gcc prog.c -o prog kaynak program için C önişlemcisi (preprocessor) çağırılır -- cpp ön işlemciden geçirilmiş kaynak program için gcc tarafından assembly komut setleri oluşturulur. assembly programı için assembler çağırılarak, object code oluşturulur. -- gas oluşturulan ikili kod standart C kütüphanesine bağlayıcı (linker) kullanılarak bağlanır. -- ld

Intel ve AT&T söz dizimleri x86 komut setleri için birden fazla söz dizimi (mnemonics) vardır. makina komutları saf ikili formatda olmak zorundadır. MOV BX,AX movw %ax,%bx 1000100111000011

AT&T söz dizimi Daha taşınabilir bir assembler. gcc AT&T söz dizimini kullanarak assembly kodu oluşturur gas, bu söz diziminden anlar. Genellikle C programcıları bu söz dizimleri ile ilgilenmezler. Yanız! gdb de bu sözdizimine uygun olarak çıktılar üretir.

AT&T söz dizimi (özellikler) Kaynak ve hedef tanımları Intel'dekinin aksi sıradadır. Komutlar ve saklayıcı isimleri küçük harflidir. Saklayıcı isimleri % ile ifade edilir. Her komut işlediği değerlerin boyutunu bildirecek şekilde isim değiştirir (movb, movw, movl). Tanımlı değerler $ ile gösterilir ($32, $hata_str) Bellek referansı gösterimi farklıdır. -/+disp(%index,%scale), %base

gdb gdb C programları ile çalışan üst seviye bir hata ayıklayıcıdır. Fakat assembly komut setleri seviyesinde programınızı incelemenizi sağlar. Belleği ve saklayıcıların durumlarını incelemenize olanak verir.

gdb kullanımı $ gdb program_dosyasi (gdb) break 15 Breakpoint 1 at 0x8048548: file readdir.c, line 15. (gdb) run... (gdb) continue info breakpoints break fonksiyon_adi run argumanlar enable/disable breakpoint_numarasi continue breakpoint_numarasi show args

(gdb) info registers eax 0x0 0 ecx 0x1 1 edx 0x40137798 1075017624 ebx 0x40136f60 1075015520 esp 0xbffff9f0 0xbffff9f0 ebp 0xbffffa08 0xbffffa08 esi 0x400098b8 1073780920 edi 0xbffffa64-1073743260 eip 0x8048548 0x8048548...... gdb kullanımı (devam) info all-registers

gdb kullanımı (devam) (gdb) print $eip (gdb) print degisken $1 = (void *) 0x8048548 $5 = (struct dirent *) 0x80484b8 (gdb) print $eax... $2 = 0 (gdb) print $5 (gdb) print $eip=0x804854c /x HEX /d signed INT /c ASCII /u untigned INT /t Binary /o OCTAL Yalnızca tek karakterlik veya integer değerlik bilgileri gösterebilir string gösterimleri için x komutu kullanılmalıdır.

0x40075170 in printf () from /lib/libc.so.6 gdb kullanımı (devam) (gdb) until 2 (gdb) next (gdb) step 2. brakepoint'e kadar işlet bir sonraki C satırını işlet bir sonraki C satırını dallanmadan işlet (gdb) nexti 0x080486c2 48 printf ("Dosya Adi : %s\n", dp->d_name); (gdb) stepi 0x080486ce 48 printf ("Dosya Adi : %s\n", dp->d_name); (gdb) stepi 0x08048408 in printf () (gdb) stepi

Yolunuzu Belirleyin INT 80H : Çekirdek fonksiyonları çağırımı Çekirdek sürümlerine bağımlı kod. Extra kod (kütüphane) bağımlılığınız olmaz. Kütüphane fonksiyonları kullanımı Sürüm bağımlılıklarından kurtulursunuz. Taşınabilir bir kod üretilebilir Programınızın karmaşıklığı yönetilebilir bir boyutlarda tutulabilir

INT 80H Çekirdeğin sağladığı sistem çağrılarının kullanımı. Çağrı numarası %eax saklayıcısında bulunmalı Eğer parametrelerin sayısı <6 ise, sırası ile, %ebx,%ecx,%edx,%esi,%edi Parametrelerin sayısı >5 ise, bellek alanına referans yapabilir veya stack kullanabilirsiniz. Dönüş değeri %eax'te tutulacaktır.

C Fonksiyon Çağırımları Dönüş değeri %eax'te, 32bit'den büyük ise %edx ve %eax'te ortak olarak tutulacaktır. Fonksiyonlara parametreler stack kullanılarak gönderilir. Parametreler stack'ta ters yönlü olarak bulunur. İlk parametre son gönderilir.

Stack Frame C içerisinde stack'ın genel ve geniş bir kullanımı vardır. Fonksiyyon parametreleri, yerel değişkenler için sürekli olarak kullanılır. C fonksiyonların kullanan herhangi bir assembly programı öncelikle stack frame'ini oluşturmalıdır : pushl %ebp movl %esp, %ebp Stack Frame'i yok etmek için : movl %ebp, %esp

Sistem Çağrısı kullanımı.include "defines.h".data selam:.string "selam asm\n".globl main main: movl $SYS_write,%eax movl $STDOUT,%ebx movl $selam,%ecx movl $11,%edx int $0x80 ret

Kütüphane Fonksiyonları.global main.mystring :.string "EAX : %x\nebx : %x\necx : %x\nedx : %x\n" main : # once bizi cagiran programin bilgilerini stack'a atiyoruz. pushl %ebp # stackframe'in baslangici ebp ile gosteriliyor movl %esp, %ebp # stack frame'imiz ebp ve esp ile tanimlandi pushl pushl pushl %ebx %esi %edi

Kütüphane Fonksiyonları # buradan sonra gerekli hazirliklar yapildi # artik programimizi yazabiliriz. # register bilgilerini ekrana yazdir. # sirasi ile eax, ebx, ecx, edx movl $10, %eax pushl %edx pushl %ecx pushl %ebx pushl %eax pushl $.mystring call printf

# bizi çağıran programın bilgilerini # register'lara geri yuklemeliyiz # popl %edi # popl %esi # popl %ebx # popl %ebp leave ret Kütüphane Fonksiyonları

Teşekkürler Sorular