Giáo trình Bài mở đầu - Bài 6: Lập trình C - Ngô Duy Hòa
Bạn đang xem tài liệu "Giáo trình Bài mở đầu - Bài 6: Lập trình C - Ngô Duy Hòa", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- giao_trinh_bai_mo_dau_bai_6_lap_trinh_c_ngo_duy_hoa.pdf
Nội dung text: Giáo trình Bài mở đầu - Bài 6: Lập trình C - Ngô Duy Hòa
- Ngo Duy Hoa - KHMT - CNTT -BKHN Nội dung bài học •Các bước biên dịch chương trình. •Sử dụng MAKEFILE Bài 6. Lập trình C •Cơ bản về lập trình Unix/Linux C. • Ngô Duy Hòa – KHMT - CNTT 1. Biên dịch trong Unix/Linux 1.1 Cấu trúc file thực thi Cấu trúc a.out và COFF file Cấu trúc ELF file Ngo Duy Hoa - KHMT - CNTT -BKHN 1
- Ngo Duy Hoa - KHMT - CNTT -BKHN Các sections chính trong ELF Linux Run-time Memory Image Memory invisible to Kernel virtual memory 0xc0000000 user code User stack (created at runtime) %esp (stack pointer) Memory-mapped region for shared libraries 0x40000000 brk Run-time heap (created by malloc) Read/write segment (. , . ) data bss Loaded from the Read-only segment executable file (.init, .text, .rodata) 0x08048000 0 Unused Nạp chương trình vào bộ nhớ tiến trình 1.2 Các bước biên dịch chương trình File data.h File io.c void data_func(); #include GCC – GNU Compiler Collection #include “data.h” File io.h • cpp: preprocess macros void io_func() void io_func(); { • cc1: perform semantic routines and printf(“IO func.\n”); translate into assembly language File main.c } • as: assemble to relocatable object files #include “io.h” #include “data.h” File data.c • ld: linking #include • To view the commands executed to run int main () #include “data.h” the stages of compilation. { io_func(); void data_func() –gcc-v data_func(); { return 0; printf(“Data func.\n”); } } Ngo Duy Hoa - KHMT - CNTT -BKHN 2
- Ngo Duy Hoa - KHMT - CNTT -BKHN 1.3 Biên dịch file thư viện Linking with Static Libraries From Source to Execution Source Program Assembly Preprocessor Compiler Code Assembler cpp / gcc -E cc1 / gcc -S as / gcc -c dynamic- Object static- linking Program linking Executables Linker Loader ld / gcc -l Ngo Duy Hoa - KHMT - CNTT -BKHN 3
- Ngo Duy Hoa - KHMT - CNTT -BKHN Dynamic Linking with Shared Library Tạo thư viện liên kết tĩnh Shared library? Position-Independent Code 0x08048000 main: 0x08048000 main: program program call printf call printf 0x08048f44 printf: PLT printf: (r/o code) call GOT[5] libc ret GOT [5]: &printf (r/w data) Static Libraries 0x40001234 printf: libc ret Dynamic Shared Libraries Lazy Dynamic Linking 0x080480 00 main: program • Lazy mode: Thư viện call printf được nạp khi có lời PLT printf: (r/o code) call GOT[5] gọi đến nó. GOT [5]: dlfixup (r/w data) 0x400012 34 printf: dlfixup: libc GOT[5] = &printf ret call printf Ngo Duy Hoa - KHMT - CNTT -BKHN 4
- Ngo Duy Hoa - KHMT - CNTT -BKHN Sử dụng makefile 2. Sử dụng make tools Đặt kịch bản biên dịch chương trình, không phải gõ lại nhiều lần Makefile Ví dụ thứ nhất • Makefile được sử dụng trong lời gọi: $ make •Nếu đặt tên khác (makefile) thì gọi: – make –f filename Ví dụ thứ hai Ví dụ thứ hai (tiếp) Ngo Duy Hoa - KHMT - CNTT -BKHN 5
- Ngo Duy Hoa - KHMT - CNTT -BKHN 3. Lập trình cơ bản với C Ngo Duy Hoa - KHMT - CNTT -BKHN 6
- Ngo Duy Hoa - KHMT - CNTT -BKHN Thank you! Ngo Duy Hoa - KHMT - CNTT -BKHN 7