Programowanie niskopoziomowe



Podobne dokumenty
Programowanie Niskopoziomowe

Ćwiczenie nr 6. Programowanie mieszane

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Programowanie Niskopoziomowe

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Komputery przemysłowe i systemy wbudowane

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

PROGRAMOWANIE NISKOPOZIOMOWE

Assembler w C++ Syntaksa AT&T oraz Intela

Programowanie hybrydowe łączenie C/C++ z asemblerem

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Adam Kotynia, Łukasz Kowalczyk

PROGRAMOWANIE NISKOPOZIOMOWE

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Przepełnienie bufora i łańcuchy formatujace

Wstęp do programowania

Wstęp do programowania. Wykład 1

Podstawy programowania. Wykład 1 Wstęp. Krzysztof Banaś Podstawy programowania 1

PMiK Programowanie Mikrokontrolera 8051

Wykład 4: Klasy i Metody

Architektura komputerów

Programowanie Niskopoziomowe

Kompilator języka C na procesor 8051 RC51 implementacja

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Konsolidacja (linking)

Cel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Podstawy Informatyki Języki programowania c.d.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Opis efektów kształcenia dla modułu zajęć

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Język ludzki kod maszynowy

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Programowanie strukturalne język C - wprowadzenie

Wirusy w systemie Linux. Konrad Olczak

Wstęp do programowania

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wskaźniki. Informatyka

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Zarządzanie pamięcią operacyjną

Podział programu na moduły

Języki i metody programowania I

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

WYKŁAD 1 - KONSPEKT. Program wykładu:

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Zaawansowane programowanie w języku C++ Podstawy programowania w C++

Podstawy programowania

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Architektura komputerów

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie w asemblerze Linkowanie

Wykład 1

JAK DZIAŁAJĄ FUNKCJE PODZIAŁ PAMIĘCI

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Szablony funkcji i szablony klas

Elementy składoweµc - przypomnienie

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Lab 9 Podstawy Programowania

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

76.Struktura oprogramowania rozproszonego.

Wprowadzenie do szablonów szablony funkcji

Programowanie obiektowe

Wykład 4. Środowisko programistyczne

Wprowadzenie do szablonów szablony funkcji

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie obiektowe

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Lista instrukcji mikroprocesora Programowanie w assemblerze

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Java jako język programowania

Metody Realizacji Języków Programowania

Parę słów o przepełnieniu bufora.

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Programowanie współbieżne i rozproszone

Java EE produkcja oprogramowania

Buffer Overflow (art. 2) by h07

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Wstęp. do języka C na procesor (kompilator RC51)

Spis treści. 1 Java T M

ZASADY PROGRAMOWANIA KOMPUTERÓW

Transkrypt:

Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1

Programowanie niskopoziomowe w systemie operacyjnym Programowanie w systemie operacyjnym nie wymaga od programisty dokładnej znajomości maszyny. Środowisko pracy programu jest przygotowywane przez system operacyjny i moduł startowy. Programista ma za zadanie jedynie utworzyć użytkową część programu. 2

Programowanie niskopoziomowe w systemie operacyjnym Funkcje realizowane przez system operacyjny: Alokacja pamięci Obsługa systemu plików Obsługa wejścia/wyjścia Obsługa wyjątków 3

Programowanie niskopoziomowe poza systemem operacyjnym Programy uruchamiane poza środowiskiem systemu operacyjnego operują bezpośrednio na zasobach sprzętowych maszyny. Programista ma w tym przypadku obowiązek zaalokować pamięć, m.in. stos. Takie programy muszą być pisane w asemblerze. 4

Programowanie niskopoziomowe poza systemem operacyjnym Przykłady: Bootloader program ładujący system operacyjny jądro systemu operacyjnego samodzielna aplikacja systemu wbudowanego 5

Tworzenie programu z wykorzystaniem programowania niskopoziomowego Podczas tworzenia aplikacji możliwe jest równoległe stosowanie języków wysokopoziomowych i asemblera. Tworzony program może się składać z wielu plików pisanych w różnych językach programowania. Ta uniwersalność jest możliwa dzięki wieloetapowemu procesowi tłumaczenia tekstu programu na kod wykonywalny. 6

Proces tłumaczenia kodu programu pisanego w języku wysokiego poziomu preprocessing i kompilacja Tekst programu Zbiór obiektowy Zbiory obiektowe Zbiory Zbiory obiektowe obiektowe biblioteczne biblioteczne biblioteczne konsolidacja (linkowanie) Kod wykonywalny 7

Proces tłumaczenia kodu programu wersja z asemblacją kompilacja asemblacja Tekst programu Wygenerowany kod asemblera Zbiór obiektowy Kod wykonywalny Zbiory obiektowe Zbiory Zbiory obiektowe obiektowe biblioteczne biblioteczne biblioteczne konsolidacja 8

Pojawia się możliwość łączenia programowania w języku wysokiego poziomu i w asemblerze - programowanie hybrydowe kompilacja asemblacja Tekst programu Wygenerowany kod asemblera Zbiór obiektowy Kod asemblera utworzony przez programistę Zbiory obiektowe biblioteczne asemblacja Zbiór obiektowy konsolidacja Kod wykonywalny 9

Łączenie programowania w asemblerze i języku wysokiego poziomu jest możliwe nawet, jeśli proces kompilacji pomija postać asemblerową Tekst programu kompilacja Zbiór obiektowy Kod asemblera utworzony przez programistę Zbiory obiektowe biblioteczne asemblacja Zbiór obiektowy konsolidacja Kod wykonywalny 10

Zbiory obiektowe Zbiory obiektowe zawierają kod wykonywalny, w którym nie zostały zdefiniowane odwołania do obiektów zewnętrznych: zmiennych i procedur definiowanych w innych modułach. Zbiory obiektowe zawierają informację o tych odwołaniach i udostępnianych przez siebie obiektach. 11

Zbiory obiektowe Popularne formaty zbiorów obiektowych: ELF (Executable and Linking Format) popularny w systemie Linux COFF (Common Object File Format)- używany w systemie Windows SOM (System Object Module) format wprowadzony przez firmę Hewlet Packard 12

Wiązanie obiektów i odwołań Dzięki zawartym informacjom konsolidator może wiązać obiekty z odwołaniami w innych modułach. Konsolidator nie musi mieć dostępu do informacji, w jakim języku był pisany dany moduł, podlegający łączeniu. 13

Zasady łączenia kodu w języku wysokiego poziomu i w asemblerze Aby możliwe było wiązanie odwołań do obiektów z innych modułów muszą one być: Zewnętrzne w modułach odwołujących się do nich Publiczne w modułach, gdzie są definiowane 14

Obiekty zewnętrzne w języku C i w asemblerze Niezdefiniowane funkcje w języku C są z założenia traktowane przez kompilator jako zewnętrzne. Kompilator jest informowany o istnieniu nazwy zewnętrznej zmiennej za pomocą słowa kluczowego extern. Wszelkie obiekty zewnętrzne muszą zostać w asemblerze zadeklarowane za pomocą extern. 15

Obiekty publiczne w języku C i w asemblerze Jedynie obiekty publiczne są dostępne dla innych modułów. W języku C wszystkie obiekty globalne są publiczne, poza zdefiniowanymi ze słowem static. W asemblerze obiekty publiczne definiuje się z zastosowaniem słowa static lub global. 16

Przykład łączenia kodu w języku C i w asemblerze - kod w języku C extern void f1 (void); /* słowo extern pokazuje, że jest to obiekt zewnętrzny*/ int main () { f1(); return 0; } 17

Przykład łączenia kodu w języku C i w asemblerze - kod w asemblerze.text.global f1 f1: pushl %ebp movl %esp, %ebp movl $4, %eax /* 4 to funkcja systemowa "write" */ movl $1, %ebx /* 1 to stdout */ movl $tekst, %ecx /* adres tekstu */ movl $len, %edx /* długość tekstu w bajtach */ int $0x80 /* wywołanie przerwania systemowego */ popl %ebp ret.data tekst:.string "Hello world\n" len =. - tekst 18

Przekazywanie argumentów funkcji z języka C do asemblera Argumenty w języku C przekazywane są do funkcji przez stos: odkładane są na stosie od ostatniego do pierwszego. W asemblerze do odczytu argumentów posługujemy się wskaźnikiem stosu. pushl %ebp movl %esp, %ebp 19

Zwracanie wartości funkcji do programu w języku C W języku C wartość funkcji jest zwracana programowi wywołującemu w jednym z rejestrów mikroprocesora. W architekturze i386 do zwracania używa się rejestru EAX, bądź jego "mniejszych" odpowiedników, tj. AX i AH/AL. Przykład: by funkcja, napisana w asemblerze zwróciła "1" przed rozkazem ret należy napisać: movl $1, %eax 20

Łączenie kodu w języku C i w asemblerze w jednym zbiorze Możliwe jest dołączanie do kodu w języku C ciągu instrukcji asemblera za pomocą tzw. wstawek asemblerowych, definiowanych słowem asm. Przykład: int main () { asm ("nop"); } 21

Dyrektywy organizacji segmentów w asemblerze Pisząc program w asemblerze dla architektury x86 należy wskazać segmenty, w których definiowane są poszczególne obiekty za pomocą dyrektyw organizacji segmentów:.section.text - kod programu.section.rodata stałe inicjalizowane.section.data - zmienne inicjalizowane.section.bss - dane nieinicjalizowane 22

Przykład użycia dyrektyw organizacji segmentów w asemblerze ;initializing data.section.data x:.byte 128 ;one byte initialized to 128 y:.long 1,1000,10000 ;3 long words ;initializing ascii data.ascii "hello ;ascii without null character asciz "hello ;ascii with \0 ;allocating memory in bss.section.bss.equ BUFFSIZE 1024 ;define a constant.comm z, 4, 4 ;allocate 4 bytes for x with ;4-byte alignment 23

Przykład użycia dyrektyw organizacji segmentów w asemblerze, cd. ;making symbols externally visible.section.data.globl w ;declare externally visible ;e.g: int w = 10.text.globl fool ;e.g: fool(void) { } fool: leave return 24