ทำไมผู้อ่านถึงแสดง“ System V” เป็นระบบปฏิบัติการของฉันแทนที่จะเป็น Linux


10

ฉันรวบรวมโปรแกรม C ขนาดเล็ก (รหัส 2 บรรทัด) กับ gcc เพื่อพยายามทำความเข้าใจกับรูปแบบไฟล์ ELF ทำreadelf -hในไฟล์วัตถุฉันมีในส่วนหัว:

OS/ABI:                            UNIX - System V 

ฉันกำลังใช้งาน Fedora ดังนั้นทำไมไม่ใช้ Linux แทนล่ะ

แก้ไข : ฉันรวบรวม

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

gcc -o main.o -c main.cกับ รุ่น gcc ของฉันคือ

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

โปรดแสดงให้เราทราบ i) รหัสที่คุณรวบรวม ii) ผลลัพธ์ของgcc --versionและ iii) คำสั่งที่คุณใช้ในการรวบรวม
terdon

ฉันแก้ไขคำถามแล้ว
alex_reader

ฉันเพิ่งทำreadelf -h /bin/lsบนเดเบียน gnu / linux OS/ABI: UNIX - System Vนอกจากนี้ยังแสดงให้เห็นว่า ฉันเดาว่า ABI นั้นใช้กับเคอร์เนลมากกว่าหนึ่งตัวไม่ใช่แค่ลินุกซ์ ฉันก็รู้ว่า linux รองรับมากกว่าหนึ่ง ABI
ctrl-alt-delor

6
Wikipediaบอกว่ามัน [ฟิลด์ OSABI ในส่วนหัวของเอลฟ์] นั้นถูกตั้งค่าเป็น 0 [SysV] โดยไม่คำนึงถึงแพลตฟอร์มเป้าหมาย
Stéphane Chazelas

1
ฟิลด์นี้จะบอกว่าไฟล์ ELF กำลังใช้งานส่วนขยายเฉพาะ OS ใด ๆ หรือไม่ค่าเริ่มต้นคือ 0 คำอธิบาย detailled เพิ่มเติมที่นี่ (ที่ EI_OSABI)
Leiaz

คำตอบ:


8

ความแตกต่างเล็กน้อยระหว่าง executables ของ ELF บนแพลตฟอร์มที่ต่างกัน “ UNIX - System V” เป็นพื้นฐานทั่วไป; System Vคือรูปแบบของเอลฟ์ที่มาจาก ค่าตัวเลขที่สอดคล้องกันคือ 0 ค่านี้บ่งชี้ว่าปฏิบัติการไม่ได้ใช้ส่วนขยายเฉพาะระบบปฏิบัติการใด ๆ อย่างน้อย Debian GNU / Linux จะกำหนดค่า GCC / binutils เพื่อสร้างไฟล์เรียกทำงานที่มีค่าเริ่มต้นเป็น 0


3
และมาตรฐานเอลฟ์กล่าวว่า 0 หมายถึง "ELFOSABI_NONE 0 ไม่มีนามสกุลหรือที่ไม่ได้ระบุ" sco.com/developers/gabi/2003-12-17/ch4.eheader.html
Ciro Santilli冠状病毒审查六四事件法轮功
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.