Tại sao readelf hiển thị hệ thống V V như là hệ điều hành của tôi thay vì Linux?


10

Tôi đã biên dịch một chương trình C nhỏ (2 dòng mã) với gcc để cố gắng hiểu định dạng tệp ELF. Làm một readelf -htệp trên đối tượng, tôi có trong tiêu đề:

OS/ABI:                            UNIX - System V 

Tôi đang sử dụng Fedora, vậy tại sao không phải là Linux thay thế?

Chỉnh sửa : Tôi đã biên dịch

int main(){
  int x = 0;
  x++;
}

với gcc -o main.o -c main.c. Phiên bản gcc của tôi là

gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) 

Vui lòng cho chúng tôi xem i) mã bạn đã biên dịch ii) đầu ra gcc --versionvà iii) lệnh chính xác mà bạn đã sử dụng để biên dịch mã đó.
terdon

Tôi đã chỉnh sửa câu hỏi tương ứng.
alex_reader

Tôi vừa mới làm readelf -h /bin/lstrên debian gnu / linux. Nó cũng cho thấy OS/ABI: UNIX - System V. Tôi đoán là ABI được sử dụng trên nhiều kernel, không chỉ linux. Tôi cũng biết rằng linux hỗ trợ nhiều hơn một ABI.
ctrl-alt-delor

6
Wikipedia cho biết Nó [trường OSABI trong tiêu đề ELF] thường được đặt thành 0 [SysV] bất kể nền tảng đích
Stéphane Chazelas

1
Trường này cho biết nếu tệp ELF đang sử dụng bất kỳ tiện ích mở rộng cụ thể nào của HĐH, mặc định là 0. Mô tả chi tiết hơn ở đây (tại EI_OSABI).
Leiaz

Câu trả lời:


8

Có một vài sự khác biệt giữa các tệp thực thi ELF trên các nền tảng khác nhau. UNIX UNIX - Hệ thống Vv là điểm chung; Hệ thống V là nơi định dạng ELF xuất phát. Giá trị số tương ứng là 0. Giá trị này biểu thị rằng tệp thực thi không sử dụng bất kỳ tiện ích mở rộng dành riêng cho hệ điều hành nào. Debian GNU / Linux, ít nhất, cấu hình GCC / binutils để tạo các tệp thực thi với trường này được đặt thành 0 theo mặc định.


3
Và tiêu chuẩn ELF nói 0 có nghĩa là "ELFOSABI_NONE 0 Không có phần mở rộng hoặc không xác định" sco.com/developers/gabi/2003-12-17/ch4.eheader.html
Ciro Santilli冠状病毒审查六四事件法轮功
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.