•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
7 trang |
Chia sẻ: Mr Hưng | Lượt xem: 858 | Lượt tải: 0
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:
- sv_bai_6_5582.pdf