Công cụ nm
Lệnh nm liệt kê toàn bộ các tên hàm (symbol) đƣợc mã hoá trong file đối tƣợng (object) và nhị phân (binary). Lệnh nm sử dụng cú pháp sau:
nm [options] file
L ệnh nm liệt kê những tên hàm chứa trong file.
Tuỳ chọn Miêu tả
-C| -demangle Chuyển tên ký tự vào tên mức ngƣời dùng để cho dễ đọc. -s|-print-armap Khi sử dụng các file lƣu trữ (phần mở rộng là “.a”), in ra các
chỉ số của module chứa hàm đó.
-u| -undefined-only Chỉ đƣa ra các hàm không đƣợc định nghĩa trong file này, tức là các hàm đƣợc định nghĩa ở một file khác.
- l | -line-numbers Sử dụng thông tin gỡ rối để in ra số dòng nơi hàm đƣợc định nghĩa Công cụ ar
Lệnh ar sử dụng cú pháp sau:
ar {dmpqrtx} [thành viên] file
Lệnh ar tạo, chỉnh sửa và trích các file lƣu trữ. Nó thƣờng đƣợc sử dụng để tạo các thƣ viện tĩnh- những file mà chứa một hoặc nhiều file đối tƣợng chứa các chƣơng trình con thƣờng đƣợc sử dụng (subrountine) ở định dạng tiền biên dịch (precompiled format), lệnh
ar cũng tạo và duy trì một bảng mà tham chiếu qua tên ký tự tới các thành viên mà trong đó chúng đƣợc định nghĩa. Chi tiết của lệnh này đã đƣợc trình bày trong chƣơng trƣớc.
Công cụ idd
Lệnh nm liệt kê các hàm đƣợc định nghĩa trong một file đối tƣợng, nhƣng trừ khi ta biết những gì thƣ viện định nghĩa những hàm nào. Lệnh idd hữu ích hơn nhiều. idd liệt kê các thƣ viện đƣợc chia sẻ mà một chƣơng trình yêu cầu để mà chạy. Cú pháp của nó là:
idd [options] file
Lệnh idd in ra tên của thƣ viện chia sẻ mà file này sử dụng.
Ví dụ: chƣơng trình thƣ “client mutt” cần 5 thƣ viện chia sẻ, nhƣ đƣợc minh hoạ sau đây:
- 90 - libnsl.so.1 => /lib/libns1.so.1 (0x40019000) libslang.so.1 => /usr/lib/libslang.so.1 libnsl.so.1 => /lib/libns1.so.1 (0x40019000) libslang.so.1 => /usr/lib/libslang.so.1 (0x4002e000) libm.so.6 => /lib/libm/so.6 (0x40072000)
libc.so.6 => /lib/libc.so.6 (0x4008f000)
/lib/id-linux.so.2 => /lib/id-Linux.so.2 (0x4000000)
Tìm hiểu lệnh idconfig
Lệnh idconfig sử dụng cú pháp sau:
ldconfig [tuỳ chọn] [libs]
Lệnh ldconfig xác định rõ các liên kết động (liên kết khi chạy) đƣợc yêu cầu bởi thƣ viện đƣợc chia sẻ nằm trong các thƣ mục /usr/lib và /lib. Dƣới đây là các tùy chọn của lệnh này:
Các tuỳ chọn Các miêu tả
-p Đơn thuần chỉ in ra nội dung của /etc/ld.so.cache, một danh sách hiện thời các thƣ viện đƣợc chia sẻ mà ld.so biết. -v Cập nhật /etc/ld.so.cache , liệt kê số phiên bản của mỗi thƣ
viện, quét các thƣ mục và bất kỳ liên kết mà đƣợc tạo ra hoặc cập nhật.
Các tuỳ chọn của hàm idconfig Biến môi trường và file cấu hình.
Chƣơng trình tải (loader) và trình liên kết (linker) ld.so sử dụng 2 biến môi trƣờng. Biến thứ nhất là $LD_LIBRARY, chứa danh sách các thƣ mục chứa các file thƣ viện đƣợc phân cách bởi dấu hai chấm để tìm ra các thƣ viện cần thiết khi chạy. Nó giống nhƣ biến môi trƣờng $PATH. Biến môi trƣờng thứ hai là $LD_PRELOAD, một danh sách các thƣ viện đƣợc ngƣời dùng thêm vào đƣợc phân cách nhau bởi khoảng trống (space).
ld.so cũng cho phép sử dụng 2 file cấu hình mà có cùng mục đích với biến môi trƣờng đƣợc đề cập ở trên. File /etc/ld.so.conf chứa một danh sách các thƣ mục mà chƣơng trình tải và trình liên kết (loader/linker) nên tìm kiếm các thƣ viện chia sẻ bên cạnh /usr/lib và /lib. /etc/ld.so.preload chứa danh sách các file thƣ viện đƣợc phân cách bằng một khoảng trống các thƣ viện này là thƣ viện ngƣời dùng tạo ra.