Documente Academic
Documente Profesional
Documente Cultură
Contents
1. Programare modulară.............................................................................................................................2
1. Modular Programmierung......................................................................................................................2
1.1 Cum se poate împărți o problemă în sub-probleme?........................................................................2
1.1 Wie können Sie ein Problem in Teilprobleme unterteilen?..............................................................2
1.2 Tehnici și instrumente......................................................................................................................3
1.2 Techniken und Werkzeuge...............................................................................................................3
1.2.1 Includerea statică la compilare/asamblare: directiva %include.................................................3
1.2.1 Statische Einbeziehung bei der Kompilierung / Assemblierung: die Direktive %include........3
1.2.2 Legarea statică la linkeditare.......................................................................................................7
1.2.2 Statische Bindung zu verlinkten..................................................................................................7
1.2.3 Cerințele NASM..........................................................................................................................11
1.2.3 Cerințele NASM..........................................................................................................................11
1.2.4 Folosirea în practică a directivelor global și extern.................................................................11
1.2.4 Anwendung von die Direktiven global und extern in der Praxis.............................................11
1.2.5 Pașii necesari construirii programului executabil final............................................................13
1.2.5 Die zum Erstellen des endgültigen ausführbaren Programms erforderlichen Schritte............13
1
Prezentăm forma generală a unui program Wir präsentieren die allgemeine Form eines
în NASM, însoţită de un scurt exemplu: Programms in NASM, begleitet von einem
kurzen Beispiel:
1.1 Cum se poate împărți o problemă 1.1 Wie können Sie ein Problem in
în sub-probleme? Teilprobleme unterteilen?
Modularizarea este un concept care are Modularisierung ist ein Konzept, das je nach
sensuri diferite în funcţie de nivelul de Abstraktionsebene, auf die es angewendet
abstractizare la care este aplicat: wird, unterschiedliche Bedeutungen hat:
• La nivelul programelor, • Auf Programmebene besteht die
modularizarea constă în crearea de Modularisierung in der Erstellung logischer
unități logice; Einheiten;
• La nivelul codului sursă (al • Auf der Quellcode-Ebene (der Einheiten)
unităților), modularizarea constă în besteht die Modularisierung darin, separate
crearea de fișiere distincte; Dateien zu erstellen;
• La nivelul fișierelor, modularizarea • Auf Dateiebene besteht die
constă în crearea de subrutine. Modularisierung aus der Erstellung von
Unterprogrammen.
În momentul creării unei aplicaţii mai Bei der Erstellung einer komplexeren
complexe, trebuie să ne întrebăm care sunt Anwendung müssen wir uns fragen, für
sub-problemele pentru care există deja welche Unterprobleme bereits Lösungen
rezolvări disponibile, astfel încât să nu verfügbar sind, damit wir den Code nicht
rescriem cod în mod nenecesar. unnötig umschreiben.
2
Reutilizarea codului poate să se refere la Die Wiederverwendung des Codes kann sich
următoarele aspecte: auf folgende Aspekte beziehen:
La nivelul fișierelor sursă, putem Auf Quelldateiebene können wir
refolosi wiederverwenden
o Cod sursă și date din o Quellcode und Assemblierungsdaten
asamblare o Die Direktive %include
o Directiva %include
La nivelul fișierelor binare, putem Auf der Ebene der Binärdateien können
refolosi wir wiederverwenden
o Cod sursă și date din o Quellcode und Assemblierungsdaten
asamblare o Code und Daten auf Hochsprachen
o Cod și date din limbaje de o Bibliotheken
nivel înalt
o Biblioteci Hinweis: Der Begriff „Wiederverwendung“
Observaţie: termenul „a refolosi” nu trebuie ist nicht in dem Sinne zu verstehen, dass
înţeles în sensul reutilizării unor porţiuni de einige von uns geschriebene Codeteile
cod scrise de noi, ci a reutilizării unor wiederverwendet werden, sondern dass
porţiuni de cod în general (chiar şi scrise de einige Codeteile im Allgemeinen
altcineva). wiederverwendet werden (selbst wenn sie
von jemand anderem geschrieben wurden).
Această directivă este specifică limbajului de Diese Direktive ist spezifisch für die
asamblare, dar are echivalent și în alte Assemblersprache, hat jedoch eine
limbaje. Entsprechung in anderen Sprachen.
Este foarte important de subliniat faptul că Es ist sehr wichtig zu betonen, dass die
modularizarea permite doar divizarea Modularisierung nur die Aufteilung des
codului scris în limbajul respectiv (nu se pot geschriebenen Codes in die jeweilige
combina coduri sursă scrise în mai multe Sprache ermöglicht (es ist nicht möglich, in
limbaje). mehreren Sprachen geschriebene Quellcodes
zu kombinieren).
Prin definiție, fiecare modul este o unitate de Per Definition ist jedes Modul eine
sine stătătoare şi grupează mai multe funcţii eigenständige Einheit und gruppiert mehrere
şi variabile înrudite. Funktionen und zugehörige Variablen.
Principalele avantaje ale programării Die Hauptvorteile der modularen
modulare sunt: Programmierung sind:
Abstractizare: de exemplu, în C Abstraktion: Beispielsweise enthält
fiecare modul conține o interfaţă (un in C jedes Modul eine Schnittstelle
header, extensia .h, .hpp sau fără nici (ein header, eine Erweiterung mit der
o extensie cum e cazul header-ului Endung .h, .hpp oder ohne eine
din biblioteca standard cpp) şi o Erweiterung wie die header der CPP-
implementare (fişierul sursă). În Bibliothek) und eine
3
interfaţă doar se declară funcţiile, iar Implementierung (Quelldatei). In der
definirea lor propriu zisă se Schnittstelle werden nur die
realizează în fişierul sursă. Astfel, se Funktionen deklariert und in der
asigură abstractizarea: se pune Quelldatei eine eigene Definition
accentul pe elementele esenţiale (CE realisiert. Somit ist die Abstraktion
face modulul) şi se ignoră detaliile gewährleistet: Es wird Wert auf das
(CUM sunt implementate aceste Wesentliche gelegt (WAS stellt das
funcţii). Modul) und Details werden ignoriert
(WIE diese Funktionen
implementiert werden).
Prin această ascundere a Diese Verschleierung der
implementării în fişierul sursă se Implementierung in der Quelldatei
asigură corectitudinea modulului stellt die Korrektheit des Moduls (der
(utilizatorul nu poate să modifice Benutzer kann den Quellcode nicht
codul sursă) şi transparenţa (se pot ändern) und die Transparenz sicher
face modificări ulterioare asupra (spätere Änderungen am Quellcode
codului sursă şi utilizatorul să nu fie können vorgenommen werden, und
conştient de acestea dacă nu se der Benutzer ist sich dessen nicht
modifică interfaţa funcţiilor). În plus, bewusst, wenn die
dacă eventual codul din Funktionsschnittstelle nicht geändert
implementare este furnizat în mod wird). Wenn der Code in der
binar (de exemplu, o bibliotecă Implementierung in binärer Form
statică, fişier obiect etc.), utilizatorii bereitgestellt wird (z. B. eine
(sau eventuali atacatori ai aplicaţiei) statische Bibliothek, eine Objektdatei
nu pot face reverse engineering ca să usw.), können Benutzer (oder
vadă codul sursă. În plus, utilizatorul mögliche Angreifer der Anwendung)
modulului poate să utilizeze doar den Quellcode nicht rückentwickeln
funcţiile expuse în interfaţă. (reverse engineering). Außerdem
kann der Modulbenutzer nur die
Funktionen verwenden, die in der
Schnittstelle verfügbar sind.
Totuși, utilizarea directivei include nu este Die Verwendung der Direktive include
programare multimodul autentică! DE CE? jedoch keine authentische
Această metodă implică anumite riscuri Multimodulprogrammierung! WARUM?
importante. Diese Methode birgt bestimmte wichtige
Risiken.
1. Prin utilizarea ei se expune codul sursă! 1. Durch die Verwendung wird der
Quellcode verfügbar gemacht!
Obţinerea unui fişier executabil trece prin 3 Das Abrufen einer ausführbaren Datei
etape principale: preprocesare, compilare erfolgt in drei Hauptschritten:
(asamblare) şi linkeditare. Vorverarbeitung, Kompilieren
(Assemblierung) und Verknüpfen
(linkediting).
4
Figura 2. Fazele obţinerii unui fişier executabil (Die Schritte zum Abrufen einer ausführbaren
Datei)
5
problemă. es kein Problem, wenn wir Variablen in
einem Kontext mit mehreren Modulen
verwenden.
Prin directiva include, includem fișierul în Durch die include-Direktive wird die
întregime – și ce este util, și ce nu! gesamte Datei eingeschlossen – und was ist
nützlich und was nicht!
; fișierul constante.inc
; gardă dublă-includere
%endif ; _CONSTANTE_INC_
%include "constante.inc"
6
cmp EAX, MAX_BYTE
ja .nu_incape_in_octet ; încape valoarea din EAX într-un byte?
; Passt der Wert in EAX in ein Byte?
.incape_in_octet:
mov [rezultat_octet], AL ; dacă da, salvăm AL în rezultat_octet
jmp .gata ; Wenn ja, speichern wir AL in rezultat_octet
.nu_incape_in_octet:
cmp EAX, MAX_WORD
ja .nu_incape_in_cuvant ; altfel verificăm dacă este suficient un WORD
; ansonsten prüfen wir, ob ein WORD ausreicht
.incape_in_cuvant:
mov [rezultat_word], AX ; dacă da, salvăm AX în rezultat_word
jmp .gata ; Wenn ja, speichern wir AX in rezultat_word
.nu_incape_in_cuvant:
mov [rezultat_dword], EAX ; dacă nu este suficient un WORD, salvăm întregul EAX
.gata: ; Wenn ein WORT nicht ausreicht, speichern wir den gesamten EAX
Acesta este un pas realizat de către un Dies ist ein Schritt, den ein Linker nach der
linkeditor după asamblare/compilare. Assemblierung / Kompilierung ausführt.
Figura 4. Obţinerea fişierului executabil: faza de compilare sau asamblare (Erhalten der
ausführbaren Datei: Kompilierungs- oder Assemblierungsphase)
7
Figura 5. Obţinerea fişierului executabil: faza de linkeditare (Erhalten der ausführbaren Datei:
Verlinktensphase)
Efectuează prelucrări asupra textului sursă, Es Führt eine Verarbeitung des Quelltextes
rezultând un text sursă intermediar. Se poate durch, was zu einem Zwischenquelltext
imagina ca fiind o componentă a führt. Es kann als eine Komponente des
compilatorului sau asamblorului. Compilers oder Assemblers vorgestellt
werden.
Poate lipsi, multe limbaje nu au un Es kann fehlen, viele Sprachen haben keinen
preprocesor! Präprozessor!
8
acestora și a variabilelor din program. ihre binäre Codierung und
Programmvariablen enthält.
Linkeditor: fișiere obiect => bibliotecă sau Linkeditor: Objektdateien => Bibliothek
program oder Programm
Legarea statică la linkeditare permite unirea Durch die statische Bindung an einen Link
mai multor module binare (fișiere obiect sau können Sie mehrere Binärmodule
biblioteci statice) într-un singur fișier. (Objektdateien oder statische Bibliotheken)
in einer einzigen Datei zusammenführen.
La intrări putem avea oricâte fișiere obiect Bei Einträgen können wir beliebige
(.OBJ) și / sau biblioteci statice (.LIB). Objektdateien (.OBJ) und / oder statische
Bibliotheken (.LIB) haben.
Atenție, nu toate fișierele .LIB sunt biblioteci Achtung, nicht alle .LIB-Dateien sind
statice! statische Bibliotheken!
La ieșiri se obţin fişiere .EXE sau .LIB Die Ausgaben erhalten .EXE- oder .LIB-
sau .DLL (Dynamic-Link Library). oder .DLL-Dateien (Dynamic Link Library).
9
Reutilizarea codului: Wiederverwendung von Code:
10
1.2.3 Cerințele NASM 1.2.3 Cerințele NASM
Este foarte important de reţinut că resursele Es ist sehr wichtig, sich daran zu erinnern,
sunt partajate de comun acord. dass die Ressourcen in gegenseitigem
Einvernehmen geteilt werden.
Exportul se realizează prin directiva global Der Export erfolgt über die Direktive global
nume1, nume2, ... Prin aceasta resursele name1, name2, ... Hierdurch werden die
respective se pun la dispoziţia oricărui fișier jeweiligen Ressourcen für jede interessierte
ar fi interesat. Datei zur Verfügung gestellt.
Importul se realizează prin directiva extern Der Import erfolgt über die Direktive extern
nume1, nume2, ... Prin aceasta se solicită name1, name2, ... Damit wird der Zugriff
accesul la resursele respective, indiferent din auf die jeweiligen Ressourcen angefordert,
ce fișier vor fi oferite. unabhängig davon, welche Datei angeboten
wird.
Nu se pot importa decât resurse care sunt Es können nur exportierte Ressourcen
exportate undeva. Însă disponibilitate fără importiert werden. Eine Verfügbarkeit ohne
solicitare este caz permis, deoarece chiar Anfrage ist jedoch zulässig, da selbst wenn
dacă nici un modul din program nu solicită / kein Modul im Programm die
folosește resursele respective, poate ele vor fi entsprechenden Ressourcen anfordert /
utilizate într-o versiune viitoare sau de către verwendet, diese möglicherweise in einer
un alt program. zukünftigen Version oder von einem
anderen Programm verwendet werden.
11
Exemplu de program multimodul NASM + Beispiel eines multimodul Programms
NASM NASM + NASM
12
1.2.5 Pașii necesari construirii 1.2.5 Die zum Erstellen des
programului executabil final endgültigen ausführbaren Programms
erforderlichen Schritte
3. Se editează legăturile dintre cele două 3. Die Verbindungen zwischen den beiden
module Modulen werden bearbeitet
Observații: cele două module pot fi Anmerkungen: Die beiden Module können
asamblate în orice ordine! Abia în timpul in beliebiger Reihenfolge assemblieren
linkeditării este necesar ca simbolurile werden! Nur während der Verlinkung ist es
referite să aibă, toate, implementare erforderlich, dass die referenzierten Symbole
disponibilă în unul dintre fișierele obiect alle in einer der dem Verlinker angebotenen
oferite linkeditorului. Objektdateien implementierbar sind.
Linkeditarea, în mod evident, este posibilă Eine Verknüpfung ist natürlich nur nach
doar după asamblare / compilare! Assemblierung / Kompilierung möglich!
13