Documente Academic
Documente Profesional
Documente Cultură
Moto
There are only two kinds of programming languages: those people always bitch about and those nobody uses.
Bjarne Stroustrup One of the main causes of the fall of the Roman Empire was that lacking zerothey had no way to indicate successful termination of their C programs. Robert Firth
14.11.2011 2
Shell scripting
CLI terminal comenzi prompt interfa
shell
globbing
expandare
grep
variabile
Unix shell
14.11.2011
Cuprins
14.11.2011
Suport curs
14.11.2011
Programe
Ce este un program?
Fiier executabil binar (coninutul este cod main)
Se mai numete simplu surs (surs C, surs Java, etc.) Scriere de cod surs sau scriere de cod
La nceput programele erau scrise direct n cod main (binar) (cartele perforate)
14.11.2011 7
Editoare
Scrierea de fiiere text (n particular cod surs) Editoare
simple one tool for the job
vim, Emacs, nano, joe notepad++, notepad2, ultraedit, Crimson Editor
integrate (IDE)
Visual Studio 2010 (varianta Visual Studio Express Edition este free) Eclipse, NetBeans Emacs, Kdevelop
Faciliti
syntax higlighting, auto indentation, utilitare pentru debugging integrate code folding, code completion (autocompletion)
14.11.2011 8
XEmacs
14.11.2011
Eclipse
14.11.2011
10
Compilare i interpretare
Un fiier cod surs poate fi compilat sau interpretat Deosebirea ntre compilare i interpretare
Compilare: codul surs este translatat de un program denumit compilator n cod main, dup care poate fi executat Interpretare: un program este executat direct din cod surs prin intermediul unui interpretor
14.11.2011
11
Avantaje/dezavantaje
Interpretare
sunt, n general, mai uor de neles de programator debugging facil execuie lent
Compilare
debugging greoi (folosirea unui depanator debugger) vitez ridicat de execuie
14.11.2011 12
My codes compiling
14.11.2011
13
Compilare
Un compilator este un translator
translateaz codul surs n cod obiect; de la un limbaj de nivel nalt n cod main
a.out a.out:
main.c
razvan@asgard:~/code$ file a.out ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), not stripped
14.11.2011
14
Fazele compilrii
Component/utilitar specializat pentru fiecare faz Preprocesare: cpp
nlocuirea directivelor de preprocesare (#include, #define) nu este specific tuturor limbajelor
Asamblare: as
translaterea fiierului n limbaj de asamblare ntr-un modul obiect (cod main)
Linking: ld
legarea mai multor module obiect i biblioteci ntr-un modul de sine stttor (de obicei un fiier executabil)
14.11.2011 15
editor
loader
executabil
biblioteca
preprocesor
linker
modul obiect
modul obiect
biblioteca
compilator
14.11.2011
asamblor
16
I Write Code
14.11.2011
18
editor
preprocesor
cod preprocesat
14.11.2011
19
Preprocesare
Fiier cod surs Fiier preprocesat
razvan@asgard:~/code$ gcc -E -o simple.i simple.c razvan@asgard:~/code$ cat simple.i # 1 "simple.c" # 1 "<built-in>" #define ITERATIONS #define INITIAL #define HEADER_STRING 10 1 "Number sum: " # 1 "<command line>" # 1 "simple.c" # 1 "/usr/include/stdio.h" 1 3 4 ............. int main (void) { int i; int sum; int main (void) { int i; int sum; printf (HEADER_STRING); for (i = INITIAL; i < INITIAL + ITERATIONS; i++) sum += i; printf ("Number sum: "); for (i = 1; i < 1 + 10; i++) sum += i; printf ("%d\n", sum); return 0; } } printf ("%d\n", sum); return 0; razvan@asgard:~/code$ cat simple.c #include <stdio.h>
14.11.2011
20
editor
preprocesor
cod preprocesat
compilator
14.11.2011 21
Compilare
ine cont de sintaxa i semantica programului
sintax: programul respect un set de reguli (o anumit gramatic)
operatorul + poate avea doi operanzi sau poate avea unul singur
Se obine fiier in limbaj de asamblare Program incorect din punct de vedere sintactic sau semantic -> erori la compilare:
razvan@asgard:~/code$ gcc main.c main.c: In function `main': main.c:6: error: `i' undeclared (first use in this function) main.c:6: error: (Each undeclared identifier is reported only once main.c:6: error: for each function it appears in.)
14.11.2011 22
Compilare (2)
Fiier cod surs Fiier dup compilare
#include <stdio.h> #define ITERATIONS #define INITIAL #define HEADER_STRING int main (void) { int i; int sum; sum = 0; printf (HEADER_STRING); for (i = INITIAL; i < INITIAL + ITERATIONS; i++) sum += i; printf ("%d\n", sum); return 0; } 14.11.2011 10 1 "Number sum: " .LC0: .string "Number sum: " .LC1: .string "%d\n" .text .globl main .type main: pushl movl subl andl movl movl call 23 $0, -8(%ebp) $.LC0, (%esp) printf %ebp %esp, %ebp $24, %esp $-16, %esp main, @function razvan@asgard:~/code$ gcc -S simple.c razvan@asgard:~/code$ cat simple.s .file .section "simple.c" .rodata
editor
preprocesor
compilator
14.11.2011
Limbaj de asamblare
14.11.2011
25
editor
preprocesor
compilator
14.11.2011
asamblor
27
Asamblare
razvan@asgard:~/code$ as -o simple.o simple.s razvan@asgard:~/code$ objdump --disassemble simple.o simple.o: file format elf32-i386
Disassembly of section .text: 00000000 <main>: 0: 1: 3: 6: 9: e: 10: 17: 1e: 23: 4f: 54: 59: 5a: 14.11.2011 e8 fc ff ff ff b8 00 00 00 00 c9 c3 call mov leave ret 28 50 <main+0x50> $0x0,%eax 55 89 e5 83 ec 18 83 e4 f0 b8 00 00 00 00 29 c4 c7 45 f8 00 00 00 00 c7 04 24 00 00 00 00 e8 fc ff ff ff c7 45 fc 01 00 00 00 push mov sub and mov sub movl movl call movl %ebp %esp,%ebp $0x18,%esp $0xfffffff0,%esp $0x0,%eax %eax,%esp $0x0,0xfffffff8(%ebp) $0x0,(%esp) 1f <main+0x1f> $0x1,0xfffffffc(%ebp)
Asamblare (2)
Translatarea fiierului n limbaj de asamblare n fiier cod obiect Instruciunile n limbaj de asamblare se traduc una cte una n echivalentul lor binar (cod main) Asamblor Exemplu rulare as/msvc
razvan@asgard:~/code$ as -o simple.o simple.s F:\code>cl /Fasimple.asm simple.c
14.11.2011
29
editor
preprocesor
modul obiect
compilator
14.11.2011
asamblor
30
Biblioteci
Bibliotec = library librrie Colecie de funcii des utilizate de ctre programe stocate ntr-un singur fiier (modul)
de fapt, o colecie de module obiect (fiiere binare)
Biblioteci (2)
Biblioteci statice (static libraries)
funciile de bibliotec apelate de un program sunt ataate codului executabil la linking codul executabil se mrete eventuale modificri ale bibliotecii din sistemul de operare nu afecteaz n nici un fel programul
editor
preprocesor
linker
modul obiect
biblioteca
compilator
14.11.2011
asamblor
34
Linking
Mai multe module obiect (inclusiv biblioteci) sunt grupate ntr-un modul de sine stttor (de obicei executabil) La legare/linking se rezolv referinele
un modul apeleaz o funcie (sau o variabil) dintr-un alt modul nurma compilrii se creeaz o referin ctre acea funcie (fr a se ti n ce modul se gsete) linker-ul rezolv aceste referine, gsind funciile (variabilele) apelate din alte module dac se apeleaz o funcie dintr-un modul ce nu se regsete la linking, apare eroare la linking
14.11.2011 35
Crearea de biblioteci
Fiierul add.c implementeaz funcia add, iar sub.c implementeaz funcia sub Dorim o bibliotec al crei coninut s fie dat de cele dou module Crearea i legarea unei biblioteci statice
razvan@asgard:~/code$ gcc -Wall -c add.c razvan@asgard:~/code$ gcc -Wall -c sub.c razvan@asgard:~/code$ ar cr libsimple.a add.o sub.o razvan@asgard:~/code$ ar t libsimple.a add.o sub.o razvan@asgard:~/code$ gcc -Wall -L. -o lib_main lib_main.c lsimple
14.11.2011
36
editor
executabil
biblioteca
preprocesor
linker
modul obiect
modul obiect
biblioteca
compilator
14.11.2011
asamblor
37
Executabil
Tip special de fiier binar
poate fi ncrcat de sistemul de operare ntr-un proces pentru a fi rulat
14.11.2011
39
Unix: trebuie precizat explicit faptul c rulm executabilul din directorul curent
razvan@asgard:~/code$ ./lib_main add = 2, sub = 0
Execuia i folosirea bibliotecilor partajate sau dinamice necesit suportul sistemului de operare Loader
componenta sistemului de operare care transpune informaia dintr-un executabil ntr-un proces loading = lansare n execuie man ld.so
14.11.2011 40
editor
loader
executabil
biblioteca
preprocesor
linker
modul obiect
modul obiect
biblioteca
compilator
14.11.2011
asamblor
41
Cuvinte cheie
program cod surs editor IDE compilator interpretor preprocesare compilare limbaj de asamblare
14.11.2011
asamblare cod obiect bibliotec linker executabil cpp, gcc, gas, ld objdump, nm ldd loader
42 42
Resurse utile
Link-uri utile
14.11.2011
43
43
The End
14.11.2011
44