นี่คือคำสั่ง abicheck ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
abicheck - ตรวจสอบไบนารีของแอปพลิเคชันสำหรับการเรียกไปยังสัญลักษณ์ส่วนตัวหรือการพัฒนาใน
ไลบรารีและสำหรับการเชื่อมโยงแบบคงที่ของไลบรารีบางระบบ
เรื่องย่อ
อาบีเช็ค [-h] [-k] [-a] [-I] [-v] [-f รายการไฟล์] [-หรือ ไฟล์นอก] [-NS ลวดลาย] [-จ ลวดลาย] [-NS
งาน] [-ล ห้องสมุด] [-ล เส้นทาง] [(-s|-ส) ฐานข้อมูลไฟล์] [(-ง|-ง) ฐานข้อมูลไฟล์] [-โอ ฐานข้อมูลไฟล์] [-NS
รายการไฟล์] ไฟล์
DESCRIPTION
อาบีเช็ค ทำงานบนไบนารีของแอปพลิเคชันและออกคำเตือนเมื่อใดก็ตามที่มีดังต่อไปนี้
ตรวจพบสามเงื่อนไข:
· ส่วนตัว เครื่องหมาย การใช้ สัญลักษณ์ส่วนตัวคือฟังก์ชันหรือตัวแปรข้อมูลในไลบรารี
แพ็คเกจที่อยู่ภายในแพ็คเกจนั้น พวกมันถูกใช้โดยไลบรารี่ในแพ็คเกจ
สำหรับการสื่อสารภายในและไม่ใช่ส่วนหนึ่งของ API/ABI ที่นักพัฒนาแอปพลิเคชัน
ควรใช้
· การพัฒนา เครื่องหมาย การใช้ สัญลักษณ์วิวัฒนาการคือฟังก์ชันหรือตัวแปรข้อมูลในไลบรารี
แพ็คเกจที่มีไว้สำหรับการใช้งานของนักพัฒนา แต่ถูกทำเครื่องหมายเป็น "กำลังพัฒนา" หรือ
"ไม่เสถียร" ในแง่ที่ว่าอาจเข้ากันไม่ได้หรือหายไปในรุ่นต่อมา
ของแพ็คเกจห้องสมุด
· คงที่ การเชื่อมโยง การลิงก์แบบคงที่ของไลบรารีระบบ (เช่น libc.a) ลงใน an
แอปพลิเคชันโดยทั่วไปไม่ใช่ความคิดที่ดีเพราะรหัสไลบรารีระบบ "ล็อก" ลงใน
ไบนารีของแอปพลิเคชันอาจเข้ากันไม่ได้กับระบบรุ่นที่ใหม่กว่า abicheck
พยายามตรวจหาการเชื่อมโยงแบบคงที่ของไลบรารีระบบบางตัว
พฤติกรรมเริ่มต้นคือ สำหรับแต่ละอ็อบเจ็กต์ไบนารีที่ตรวจสอบ เพื่อตรวจสอบการเรียกโดยตรงจากนั้น
วัตถุไบนารีเท่านั้น NS -l ตัวเลือกช่วยให้ไลบรารีที่วัตถุไบนารีนำเข้ามามี
ตรวจสอบการโทรของพวกเขาด้วย
OPTIONS
รองรับตัวเลือกต่อไปนี้:
-k ตรวจสอบไบนารีต่อไปแม้ว่าจะมีข้อผิดพลาดร้ายแรง (รายงานตัวเชื่อมโยงแบบไดนามิก
สัญลักษณ์ที่ไม่ได้รับการแก้ไข แอลดีดี(1) ความล้มเหลว ไม่พบสัญลักษณ์)
-h พิมพ์ความช่วยเหลือแบบยาว
-v ละเอียด พิมพ์ข้อมูลเพิ่มเติม
-f รายการไฟล์
พื้นที่ รายการไฟล์ เป็นไฟล์ที่มีรายการไบนารีอ็อบเจกต์ที่จะตรวจสอบ หนึ่งไฟล์ต่อบรรทัด
รายการนี้ต่อท้ายไฟล์ใดๆ ที่ให้ไว้เป็นอาร์กิวเมนต์บนบรรทัดคำสั่ง ถ้า
รายการไฟล์ คือ "-" จากนั้นใช้ stdin
-o ออกจากไฟล์
เขียนเอาต์พุตไปที่ ออกจากไฟล์ แทนที่จะเป็น stdout
-p Belt hold
แก้ไขรูปแบบชื่อเวอร์ชันที่ตรงกับการติดฉลากชุดเวอร์ชันส่วนตัว ค่าเริ่มต้นคือ
/ส่วนตัว/ โดยใช้การจับคู่ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
หากเป็นส่วนประกอบของ regex Belt hold มีสองโคลอนในแถว: แพท1::แพท2,
จากนั้นการจับคู่ระดับสัญลักษณ์จะเปิดใช้งานโดยตรวจสอบว่า รุ่น::สัญลักษณ์ or
ห้องสมุด::สัญลักษณ์ ที่ตรงกัน Belt hold (โดยที่ชื่อสัญลักษณ์ รุ่น (ถ้ามี) และ
ชื่อฐานห้องสมุดถูกแทนที่ด้วย เครื่องหมาย, รุ่นและ ห้องสมุด) ตัวอย่างเช่น,
-p 'FOO_VERS.*::_foopriv'
or
-p 'libfoo.so.*::_foopriv'
-e Belt hold
เหมือนกับ -p แต่สำหรับอินเทอร์เฟซ "ที่กำลังพัฒนา"
-L ldpath
ตั้ง LD_LIBRARY_PATH ตัวแปรสภาพแวดล้อมถึง ldpath ก่อนที่จะเรียกใช้ไดนามิก
ลิงเกอร์ ใช้ -L "" เพื่อยกเลิกการตั้งค่า LD_LIBRARY_PATH
หากเป็นส่วนประกอบหนึ่งของ ldpath คือสตริง "find" จากนั้นไลบรารีที่แชร์ทั้งหมด
in ไฟล์ ถูกพบและเส้นทางของพวกเขาถูกแทรกเข้าไปในตำแหน่ง "ค้นหา" สังเกตว่า
คำสั่งซื้อจะสุ่ม
-l ห้องสมุด
เพิ่มชื่อฐานหรือชื่อพาธแบบเต็มของไลบรารีที่ใช้ร่วมกัน ห้องสมุด ไปที่รายการ
วัตถุที่จะตรวจสอบสำหรับการโทรแบบส่วนตัว ตัวเลือกนี้อาจเกิดขึ้นมากกว่า
เมื่ออยู่บนบรรทัดคำสั่งและเป็นส่วนเสริม โดยค่าเริ่มต้น เฉพาะสายตรงจากa
มีการตรวจสอบไบนารีไปยังไลบรารีระบบ NS -l สวิตช์ช่วยให้ตรวจสอบ
การโทรทางอ้อม เช่น แอป -> supportlib -> systemlib
-a วนซ้ำไบนารีทั้งหมดก่อนที่จะตรวจสอบและรวบรวมรายการแชร์ทั้งหมด
วัตถุ นำชื่อฐานของแต่ละอ็อบเจ็กต์ที่ใช้ร่วมกันที่พบและทำตัวเหมือนเป็น
ระบุด้วย -l ตัวเลือกตัวเลือกแล้วเรียกใช้การตรวจสอบ abicheck ทางนี้,
การโทรจากออบเจกต์ "ภายในแอปพลิเคชัน" ทั้งหมดจะถูกตรวจสอบมากกว่าเพียงแค่
สายตรง. (มีประโยชน์เมื่ออ็อบเจ็กต์ที่ใช้ร่วมกันไม่มีการขึ้นต่อกัน
บันทึกไว้)
-I ละเว้นไลบรารีที่ใช้ร่วมกันในการตรวจสอบ ตรวจสอบเฉพาะโปรแกรมเรียกทำงาน เข้ากันได้กับ -NS,
ห้องสมุดจะถูกค้นหาก่อน แต่ไม่ได้ตรวจสอบ
-d ฐานข้อมูล, -D dbfile.dbfile
ระบุฐานข้อมูลสัญลักษณ์ไฟล์แฟลตแบ็คสำรองสำหรับไดนามิก (สาธารณะกับส่วนตัว)
ทดสอบ. การจัดประเภทเหล่านี้จะถูกนำมาใช้หากไลบรารีไม่มีเวอร์ชัน (เช่น
การจัดประเภทไม่มีอยู่ในห้องสมุดเอง) ใช้ -D เพื่อแสดงว่าเท่านั้น
ข้อมูลจาก dbfile.dbfile ควรใช้ เส้นใน dbfile.dbfile สามารถเป็นหนึ่งในนั้นได้
แบบฟอร์ม:
ห้องสมุด|สัญลักษณ์
ห้องสมุด|คลาส|สัญลักษณ์
ห้องสมุด|FILE=เส้นทาง
ห้องสมุด ต้องเป็นเส้นทางแบบเต็มไปยังไลบรารีที่จะระบุ (ไม่สามารถ a
ชื่อฐาน)
เครื่องหมายแบบฟอร์มแรก เครื่องหมาย เป็นส่วนตัว
เครื่องหมายรูปแบบที่สอง เครื่องหมาย กับ ชั้น ที่ไหน ชั้น อาจเป็นสาธารณะ ส่วนตัว หรือ
การพัฒนา
รูปแบบที่สามระบุไฟล์ เส้นทาง ควรเปิดตามความต้องการเมื่อ ห้องสมุด is
ครั้งแรกที่เจอ ไฟล์ เส้นทาง มีบรรทัดของสองรูปแบบแรกยกเว้น the
ห้องสมุด สนาม. รูปแบบที่สามคือการเร่งเพื่อหลีกเลี่ยงการประมวลผลการจำแนกหลายประเภท
บรรทัดสำหรับไลบรารีที่ไม่เคยพบในการรัน
-O dbfile.dbfile
ระบุไฟล์แทนที่เพื่อแก้ไขการจัดประเภทสัญลักษณ์สำหรับไดนามิก
(สาธารณะกับส่วนตัว) การทดสอบ รูปแบบสำหรับไฟล์แทนที่มีลักษณะดังนี้:
ห้องสมุด|สัญลักษณ์|คลาส
ไลบรารีสามารถเป็นพาธแบบเต็มหรือชื่อฐานได้ หากไลบรารี่คือ "__SKIP__" สัญลักษณ์
จะถูกละเว้นสำหรับไลบรารีใด ๆ ที่พบใน คลาสสามารถเป็น "สาธารณะ"
"ส่วนตัว" "กำลังพัฒนา" หรือ "ถูกลบ" คลาส "ถูกลบ" เป็นกรณีพิเศษ หมายถึง
สัญลักษณ์ถูกลบออกจากห้องสมุดในบางรุ่น สัญลักษณ์ "__ALL__" สำหรับ
คลาส "ลบ" หมายความว่าไลบรารีทั้งหมดถูกลบหรือไม่เสถียร
ใช้.
ตัวอย่าง:
libfoo.so.1|__bar|ส่วนตัว
/lib/libxyz.so.1|baz|สาธารณะ
__ข้าม__|__fputwc_xpg5
การตั้งค่าเหล่านี้จะแทนที่การจัดประเภทใดๆ ภายในไลบรารี (จาก library
รุ่น หาได้จาก พีวีเอส(1) เป็นต้น)
-A รายการไฟล์
ตั้งค่าไลบรารี ABI ที่น่าสนใจให้กับไลบรารีที่ระบุไว้ใน รายการไฟล์ (เต็ม
ชื่อพาธ หนึ่งชื่อต่อบรรทัด) เฉพาะการโทรเข้าไลบรารีเหล่านี้เท่านั้นที่จะถูกตรวจสอบ ทั้งหมด
การเรียกห้องสมุดอื่น ๆ จะถูกละเว้น
-s ฐานข้อมูล, -S dbfile.dbfile
ระบุฐานข้อมูลสัญลักษณ์ที่ครอบคลุมมากขึ้นสำหรับการทดสอบการลิงก์แบบสแตติก dbfile.dbfile อาจจะ
รายการไฟล์ที่คั่นด้วยเครื่องหมายจุลภาค หากไฟล์เป็นไฟล์เก็บถาวรแบบคงที่ (lib*.a) ไฟล์จะเป็น
ประมวลผลเพื่อแยกสัญลักษณ์ มิฉะนั้นจะเป็นไฟล์ฐานข้อมูลที่ประกอบด้วย
บรรทัดของสัญลักษณ์แบบฟอร์ม|library:module ตัวอย่างเช่น:
shmat|/usr/lib/libc.a:shmsys.o
shmctl|/usr/lib/libc.a:shmsys.o
shmdt|/usr/lib/libc.a:shmsys.o
shmget|/usr/lib/libc.a:shmsys.o
...
เมื่อสัญลักษณ์ทั้งหมดใน module.o ถูกกำหนดในแอปพลิเคชัน การเชื่อมโยงแบบคงที่ของ
โมดูลนั้น (และไฟล์เก็บถาวรของไลบรารีที่เกี่ยวข้อง) จะถือว่า ใช้ -S เพื่อแสดงให้เห็น
ว่าควรทำการทดสอบลิงก์แบบคงที่เท่านั้น
ใช้ -S int เพื่อทำการตรวจสอบลิงก์แบบคงที่และใช้ฐานข้อมูลภายในเท่านั้น
ใช้ -s ไม่มี or -S ไม่มี เพื่อข้ามการตรวจสอบการเชื่อมโยงแบบคงที่ทั้งหมด
-j งาน
วิ่ง งาน ควบคู่ไปกับกระบวนการที่แยกจากกัน หมายถึง -k. มีวัตถุประสงค์หลักสำหรับ
เครื่อง CPU หลายเครื่องโดยที่ งาน ควรใกล้เคียงกับจำนวนโปรเซสเซอร์
เอาต์พุตถูกรวบรวมในไฟล์ tmp และพิมพ์ทั้งหมดพร้อมกันเมื่อใกล้สิ้นสุดการรัน as
แต่ละงานเสร็จสิ้น
If งาน คือ "-", "ตรวจจับ" หรือ "n" แล้ว งาน จะถูกตั้งค่าเป็นตัวเลขขึ้นอยู่กับ
จำนวนโปรเซสเซอร์ในเครื่องปัจจุบัน (หากสามารถกำหนดได้)
ตัวดำเนินการ
รองรับตัวถูกดำเนินการต่อไปนี้:
ไฟล์ รายการวัตถุไบนารีของแอปพลิเคชันที่จะตรวจสอบ
เอาท์พุท
มีหนึ่งบรรทัดต่อปัญหา (อาจมีปัญหาหลายอย่างต่อการตรวจสอบไบนารี) ซึ่ง
มีลักษณะดังต่อไปนี้:
หากไม่พบปัญหา:
ชื่อไฟล์: ตกลง
หากใช้สัญลักษณ์ส่วนตัว:
ชื่อไฟล์: ส่วนตัว (ห้องสมุด:รุ่นส่วนตัว) ส่วนตัว_sym
หากมีการพัฒนาการใช้สัญลักษณ์:
ชื่อไฟล์: วิวัฒนาการ (ห้องสมุด:วิวัฒนาการ_vers) วิวัฒนาการ_sym
หากไฟล์ลิงก์แบบสแตติกในไลบรารีไฟล์เก็บถาวรของระบบ:
ชื่อไฟล์: STATIC_LINK (เก็บ)
หากข้ามการตรวจสอบไฟล์:
ชื่อไฟล์: ข้าม (เหตุผล)
ภายใต้การใช้คลาสที่ถูกลบใน -O แทนที่ตัวเลือกไฟล์ ปัญหาเหล่านี้อาจเป็น
พบ:
หากสัญลักษณ์ถูกลบออกจากไลบรารีในบางรุ่น:
ชื่อไฟล์: DELETED_SYM: เครื่องหมาย/ห้องสมุด
(ห้องสมุด จะเป็น "unbound" หากสัญลักษณ์ไม่ถูกผูกไว้)
หากห้องสมุดทั้งหมดถูกลบในบางรุ่นหรือไม่เสถียรถึง
ใช้:
ชื่อไฟล์: UNSTABLE_LIB: ห้องสมุด-soname = ห้องสมุด-เส้นทาง
(ห้องสมุด-เส้นทาง อาจเป็น "ไม่พบไฟล์" หากไม่พบไลบรารี)
ปัญหาต่อไปนี้จะทำให้เกิดข้อผิดพลาดร้ายแรงเว้นแต่ -k ใช้ตัวเลือก:
หากตัวเชื่อมโยงแบบไดนามิกไม่สามารถแก้ไขได้ N สัญลักษณ์เมื่อ แอลดีดี -r ถูกเรียกใช้:
ชื่อไฟล์: UNBOUND_SYMBOLS: N
หากตัวเชื่อมโยงแบบไดนามิกไม่พบการเชื่อมโยงแบบไดนามิก:
ชื่อไฟล์: NO_BINDINGS
If แอลดีดี -r กับ LD_DEBUG=ไฟล์,การโยง ล้มเหลว:
ชื่อไฟล์: LDD_ERROR
ในสามกรณีหลังนี้เรียกใช้ แอลดีดี -r ในไฟล์ไบนารีสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ what
ผิดพลาด (โปรดทราบว่า อาบีเช็ค ทำงาน แอลดีดี -r กับ LD_DEBUG=ไฟล์,การโยง ชุด). บางอย่าง
ระบบที่ตัวเชื่อมโยงแบบไดนามิกจะไม่ประมวลผลโปรแกรม SUID ด้วย LD_DEBUG ชุด (นี้มักจะ
ผลลัพธ์ใน NO_BINDINGS ใน อาบีเช็ค เอาท์พุท)
โปรดทราบว่าหากคุณใช้งาน abicheck บนไลบรารีที่ใช้ร่วมกัน (เช่น libfoo.so) นั่น
มี ไม่ ถูกสร้างด้วย -l lib แฟล็กเพื่อบันทึกการพึ่งพาไลบรารี จากนั้น "unbound
สัญลักษณ์" ปัญหามีโอกาสเกิดขึ้นได้มาก ไม่มีอะไรมากไปกว่าการสร้างใหม่
ห้องสมุดหรือตรวจสอบไบนารีของแอปพลิเคชันที่ใช้ไลบรารีและใช้ -l ตัวเลือกของ
เอบีเช็ค
EXIT สถานภาพ
ค่าทางออกต่อไปนี้จะถูกส่งคืน:
0 ไม่มีข้อผิดพลาดและไม่พบปัญหา
1 เกิดข้อผิดพลาดร้ายแรง
2 ไม่มีข้อผิดพลาดร้ายแรงเกิดขึ้น แต่ระบบไบนารีบางตัวมีปัญหาที่ตรวจพบ
หมายเหตุ
เฉพาะวัตถุ ELF เท่านั้นที่ถูกตรวจสอบ
ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร -s -S -d และ -O dbfiles อักขระ '#' เริ่มต้นบรรทัดความคิดเห็นตามปกติ
ยกเว้นในกรณีที่ใช้การจับคู่แบบกำหนดเอง "::" ที่จัดเตรียมผ่าน -p or -e ธง abicheck can
ตรวจสอบกับไลบรารีระบบที่มีการกำหนดเวอร์ชันสัญลักษณ์เท่านั้น (เช่น
ข้อมูลส่วนตัวและ/หรือข้อมูลที่พัฒนาขึ้นสำหรับสัญลักษณ์แต่ละตัวในห้องสมุด)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดเวอร์ชันสัญลักษณ์ โปรดดูที่ "คู่มือ Solaris Linker และไลบรารี"
สมุดคำตอบที่ URL http://docs.sun.com/ab2/coll.45.13 และ Commands/Version-Script
ส่วนของหน้าข้อมูล GNU linker "ld"
รูปแบบการจับคู่ชื่อรุ่นสัญลักษณ์เริ่มต้นคือการจับคู่ที่ไม่คำนึงถึงตัวพิมพ์กับ
สตริง "ส่วนตัว" และ "การพัฒนา" สำหรับกรณีส่วนตัวและที่กำลังพัฒนา ตามลำดับ
ชื่อไฟล์คี่ที่มีอักขระเครื่องหมายคำพูดเดียวหรือขึ้นบรรทัดใหม่จะถูกข้าม เช่น
อักขระรบกวนการเรียกคำสั่งผ่านเชลล์
ในการเรียกไดเรกทอรี่ใช้ พบ(1) และรวบรวมเอาท์พุตไปยังไฟล์เพื่อใช้กับ
-f ตัวเลือกหรือในท่อผ่านทาง:
หา ... | abicheck -f - ...
ใช้ abicheck ออนไลน์โดยใช้บริการ onworks.net