Hệ điều hành - Bài 6: Lập trình C

•Các bước biên dịch chương trình.

•Sửdụng MAKEFILE

•Cơbản vềlập trình Unix/Linux C

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

Các file đính kèm theo tài liệu này:

  • pdfsv_bai_6_5582.pdf
Tài liệu liên quan