Các thực thi bị tước và không tước trong Unix là gì?


37

Từ tập tin người đàn ông ,

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6:  Linux/i386 swap file
   /dev/hda7:  Linux/i386 swap file
   /dev/hda8:  Linux/i386 swap file
   /dev/hda9:  empty
   /dev/hda10: empty

   $ file -i file.c file /dev/{wd0a,hda}
   file.c:      text/x-c
   file:        application/x-executable, dynamically linked (uses shared libs),
   not stripped
   /dev/hda:    application/x-not-regular-file
   /dev/wd0a:   application/x-not-regular-file

Không thực hiện tước có nghĩa là gì?

Tại sao một số thực thi bị tước trong khi những người khác thì không?

Câu trả lời:


50

Nếu bạn biên dịch một tệp thực thi với cờ -g của gcc, nó chứa thông tin gỡ lỗi. Điều đó có nghĩa là đối với mỗi lệnh có thông tin dòng mã nguồn nào được tạo ra, tên của các biến trong mã nguồn được giữ lại và có thể được liên kết với bộ nhớ phù hợp trong thời gian chạy, vv Dải có thể xóa thông tin gỡ lỗi này và các dữ liệu khác được bao gồm trong tệp thực thi không cần thiết cho thực thi để giảm kích thước của tệp thực thi.


10
Xem thêm trang man dải (1) . Nói chung, dải loại bỏ tất cả các biểu tượng vì chúng không thực sự cần thiết; nó cũng xóa thông tin gỡ lỗi, nhưng các biểu tượng là điều quan trọng
Michael Mrozek

3
Khái niệm này khái quát cho hầu hết các định dạng thực thi, điều này không cụ thể đối với gcc hoặc thậm chí là unix.
Gilles 'SO- ngừng trở nên xấu xa'

4
Tôi đã có một tệp thực thi 40 MB mà khi bị tước đã giảm xuống còn 6 MB - chỉ để bạn có ý tưởng về loại không gian mà việc gỡ lỗi dữ liệu chiếm.
Nathan Osman

Vì vậy, việc tước một tệp thực thi prog.eđược xây dựng có gcc -g -o prog.e prog.cgiúp bạn tương đương với việc biên dịch gcc -O0 -o prog.e prog.ckhông?
ysap

1
@ysap không, nó không liên quan gì đến việc tối ưu hóa (-O). Mã lắp ráp vẫn giữ nguyên cho dù tập tin có bị tước hay không. Bạn nhận được một tệp thực thi mà không có thông tin gỡ lỗi (vì vậy bạn nói đúng về việc mất "-g") và không có tất cả các ký hiệu (nghĩa là tên hàm, tên biến toàn cục ...). Nó tương đương với "gcc -s -o prog.e prog.c". Khi một chương trình được thực thi, các biểu tượng không tạo ra sự khác biệt nào. Nhưng ví dụ, phần mềm độc quyền luôn có các biểu tượng bị tước vì nếu không mọi người đều có thể biết tên gốc của các chức năng và vị trí của chúng.
Gulrass
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.