สิ่งที่ถูกปล้นและไม่ได้ปล้นใน Unix?


37

จากไฟล์คน ,

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

การปอกเพื่อการทำงานหมายถึงอะไร

ทำไมบางไฟล์เอ็กเซกชั่นจึงถูกสไตรค์ในขณะที่บางรายการไม่?

คำตอบ:


50

หากคุณรวบรวมไฟล์เรียกทำงานที่รันด้วยแฟล็ก -g ของ gcc จะมีข้อมูลการดีบัก ซึ่งหมายความว่าสำหรับแต่ละคำสั่งจะมีข้อมูลที่บรรทัดของซอร์สโค้ดสร้างขึ้นชื่อของตัวแปรในซอร์สโค้ดจะถูกเก็บไว้และสามารถเชื่อมโยงกับหน่วยความจำที่ตรงกันที่รันไทม์เป็นต้นแถบสามารถลบข้อมูลการดีบักนี้และข้อมูลอื่น ๆ ในปฏิบัติการที่ไม่จำเป็นสำหรับการดำเนินการเพื่อลดขนาดของปฏิบัติการ


10
เห็นแล้วยังแถบ (1) manpage โดยทั่วไปแถบจะลบสัญลักษณ์ทั้งหมดเนื่องจากไม่จำเป็นอย่างเคร่งครัด มันลบข้อมูลการดีบักด้วยเช่นกัน แต่สัญลักษณ์คือสิ่งที่ยิ่งใหญ่
Michael Mrozek

3
แนวคิดทั่วไปสำหรับรูปแบบที่สามารถใช้งานได้ส่วนใหญ่ซึ่งไม่ได้เฉพาะเจาะจงกับ gcc หรือแม้แต่กับยูนิกซ์
Gilles 'หยุดความชั่วร้าย'

4
ฉันใช้งานได้ 40MB ซึ่งเมื่อการปล้นถูกลดเหลือ 6MB - เพื่อให้คุณได้รับความคิดเกี่ยวกับประเภทของพื้นที่ที่ข้อมูลการดีบักใช้
นาธานออสมัน

ดังนั้นการลอกไฟล์ปฏิบัติการprog.eที่สร้างขึ้นมาgcc -g -o prog.e prog.cจะทำให้คุณเทียบเท่ากับการคอมไพล์ด้วยgcc -O0 -o prog.e prog.cหรือไม่?
ysap

1
@ysap no ไม่มีส่วนเกี่ยวข้องกับการเพิ่มประสิทธิภาพ (-O) รหัสแอสเซมบลียังคงเหมือนเดิมไม่ว่าไฟล์จะถูกปล้นหรือไม่ คุณสามารถเรียกใช้งานได้โดยไม่ต้องมีข้อมูลการดีบัก (ดังนั้นคุณถูกต้องเกี่ยวกับการสูญเสีย "-g") และไม่มีสัญลักษณ์ทั้งหมด (นั่นคือชื่อฟังก์ชั่นชื่อตัวแปรทั่วโลก ... ) มันเทียบเท่ากับ "gcc -s -o prog.e prog.c" เมื่อเรียกใช้งานโปรแกรมสัญลักษณ์จะไม่สร้างความแตกต่างใด ๆ แต่ตัวอย่างเช่นซอฟต์แวร์ที่เป็นกรรมสิทธิ์มักจะมีสัญลักษณ์ที่ลอกออกเพราะมิฉะนั้นทุกคนสามารถรู้ชื่อของฟังก์ชั่นดั้งเดิมและตำแหน่งของพวกเขา
Pikrass
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.