Every link is controlled by a linker script. This script is written in the linker command language.
1. Linker Script là gì?Thông thường khi chúng ta lập trình các ngôn ngữ (ví dụ là C hoặc C++), sau khi sử dụng gcc để biên dịch các file mã nguồn ra file object, chúng ta sẽ thường thấy có 1 lệnh theo sau đó bắt đầu bằng: ld trước khi ta có được một file có thể thực thi (executable file)
Ở đây, ld cũng giống như gcc, là một công cụ giúp chúng ta trong quá trình tạo ra file thực thi.
Như ta đã biết, khi sử dụng gcc, ta sẽ có các tham số đầu vào của gcc (inputs), ld cũng vậy, ngoài các options và các cờ, một inpput quan trọng nhất đó là 1 file script để chỉ cho ld biết nó sẽ phải thực hiện những gì.
Vậy ta có thể rút ra, linker script là một loại script language (giống như shell script hay python/matlab) và loại cript này được dùng riêng biệt cho ld.
2. Kiến thức chung về linker script
Mục đích chính của linker script giúp cho ld viết cách để sắp xếp các vùng dữ liệu của một chương trình trong file thực thi. Như ta đã biết, một chương trình luôn có các vùng .data .text .heap (chưa kể các extension sections).
Trong trường hợp nếu ta không sử dụng linker tự viết, một linker mặc định được tích hợp cùng với ld sẽ được dùng. Ngoài ra ta có thể sử dụng option --verbose khi gõ lệnh ld để hiển thị linker script mặc định.
Nếu ta muốn sử dụng scipt tự viết, ta cần thêm cờ -T khi sử dụng ld, khi đó ld sẽ thay thế script mặc định bằng script được input vào command.
Bài viết được dựa trên tài liệu: https://sourceware.org/binutils/docs/ld/Scripts.html#Scripts và các kiến thức thu thập được trong quá trình làm việc
Không có nhận xét nào:
Đăng nhận xét