این دستور abicheck است که می تواند در ارائه دهنده میزبانی رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
abicheck - باینری های برنامه را برای تماس با نمادهای خصوصی یا در حال تکامل بررسی کنید
کتابخانه ها و برای پیوند استاتیک برخی از کتابخانه های سیستم.
خلاصه
ابی چک [-h] [-k] [-a] [-I] [-v] [-f فهرست فایل] [-یا مجموعه] [-پ الگو] [-e الگو] [-j
مشاغل] [-l کتابخانه] [-L ldpath] [(-s|-S) dbfile] [(-d|-D) dbfile] [-O dbfile] [-آ
فهرست فایل] فایل ها
شرح
ابی چک بر روی باینری های برنامه اجرا می شود و هر یک از موارد زیر هشدار می دهد
سه حالت شناسایی می شود:
· خصوصی نماد استفاده نمادهای خصوصی توابع یا متغیرهای داده در یک کتابخانه هستند
بسته ای که داخلی آن بسته است. آنها توسط کتابخانه های موجود در بسته استفاده می شوند
برای ارتباطات داخلی و بخشی از API/ABI توسعه دهندگان برنامه نیستند
باید استفاده کنی.
· در حال تحول نماد استفاده نمادهای در حال تکامل، توابع یا متغیرهای داده در یک کتابخانه هستند
بسته هایی که برای مصرف توسعه دهندگان در نظر گرفته شده اند، اما به عنوان "در حال تکامل" یا علامت گذاری شده اند
"ناپایدار" به این معنا که ممکن است در نسخه بعدی ناسازگار شوند یا ناپدید شوند
از بسته کتابخانه
· ایستا ربط دادن. پیوند استاتیک کتابخانه های سیستم (به عنوان مثال libc.a) به یک
برنامه به طور کلی ایده خوبی نیست زیرا کد کتابخانه سیستمی که در آن قفل می شود
باینری برنامه ممکن است با نسخه های بعدی سیستم ناسازگار شود. ابی چک
تلاش برای شناسایی پیوند استاتیک چند کتابخانه سیستم.
رفتار پیشفرض این است که برای هر شیء باینری بررسی شده، تماسهای مستقیم از آن مورد بررسی شود
فقط شی باینری در -l این گزینه به کتابخانه هایی که شی باینری وارد می کند اجازه می دهد تا داشته باشند
تماس های آنها نیز بررسی شد.
OPTIONS
گزینه های زیر پشتیبانی می شوند:
-k به بررسی باینری ها ادامه دهید حتی اگر خطاهای جدی وجود داشته باشد (گزارش های پیوند دهنده پویا
نمادهای حل نشده، ldd(1) خرابی، هیچ نمادی شناسایی نشد.
-h فرم طولانی کمک را چاپ کنید.
-v پرمخاطب. اطلاعات اضافی را چاپ کنید
-f لیست فایل
La لیست فایل یک فایل حاوی لیستی از اشیاء باینری برای بررسی است، یکی در هر خط.
این لیست به هر فایلی که به عنوان آرگومان در خط فرمان ارائه می شود، اضافه می شود. اگر
لیست فایل "-" است، سپس از stdin استفاده می شود.
-o مجموعه
خروجی را بنویسید مجموعه به جای stdout
-p الگو
مجموعههای نسخه خصوصی برچسبگذاری الگوی مطابقت نام نسخه را اصلاح کنید. پیش فرض است
/خصوصی/ با استفاده از تطابق حساس به حروف کوچک و بزرگ.
اگر جزء رژکس الگو شامل دو دونقطه در یک ردیف است: patt1::patt2,
سپس با بررسی اینکه آیا تطبیق سطح نماد فعال می شود نسخه:: نماد or
کتابخانه:: نماد کبریت الگو (که در آن نام نماد، نسخه (در صورت وجود) و
نام پایه کتابخانه جایگزین شده است نماد, نسخهو کتابخانه) مثلا،
-p 'FOO_VERS.*::_foopriv'
or
-p 'libfoo.so.*::_foopriv'
-e الگو
مثل -p اما برای رابط های "در حال تکامل".
-L ldpath
تنظیم کنید LD_LIBRARY_PATH متغیر محیطی به ldpath قبل از فراخوانی پویا
پیوند دهنده استفاده کنید -L تنظیم کردن "" LD_LIBRARY_PATH.
اگر یکی از اجزای ldpath رشته "یافتن" و سپس تمام کتابخانه های مشترک است
in فایل ها پیدا می شوند و مسیرهای آنها در مکان "یافتن" درج می شود. توجه داشته باشید که
ترتیب به صورت تصادفی خواهد بود
-l کتابخانه
نام پایه یا نام مسیر کامل کتابخانه مشترک را اضافه کنید کتابخانه به لیستی از
اشیایی که باید برای برقراری تماس خصوصی بررسی شوند. این گزینه ممکن است بیش از
یک بار در خط فرمان و افزودنی است. به طور پیش فرض، فقط تماس های مستقیم از a
باینری به کتابخانه های سیستم بررسی می شود. را -l سوئیچ اجازه می دهد تا بررسی کنید
تماس های غیر مستقیم به عنوان مثال: app -> supportlib -> systemlib.
-a قبل از بررسی همه باینریها حلقه بزنید و فهرست همه اشتراکگذاریشدهها را جمعآوری کنید
اشیاء. نام پایه هر شیء مشترک یافت شده را بگیرید و طوری رفتار کنید که انگار هست
مشخص شده با -l گزینه گزینه و سپس چک های abicheck را اجرا کنید. بدین ترتیب،
تماسهای تمام اشیاء «داخلی برنامه» به جای فقط بررسی میشوند
تماس های مستقیم (زمانی مفید است که اشیاء مشترک وابستگی خود را ندارند
ثبت شده.)
-I کتابخانه های مشترک را در بررسی نادیده بگیرید، فقط فایل های اجرایی را بررسی کنید. سازگار با -آ،
کتابخانه ها ابتدا جستجو می شوند اما بررسی نمی شوند.
-d dbfile -D dbfile
مشخص کردن پایگاه داده نماد فایل مسطح برای پویا (عمومی در مقابل خصوصی)
تست. اگر کتابخانه نسخهبندی نشده باشد، از این طبقهبندیها استفاده میشود (یعنی
طبقه بندی در خود کتابخانه وجود ندارد). استفاده کنید -D فقط برای نشان دادن آن
اطلاعات از dbfile باید استفاده شود. خطوط در dbfile می تواند یکی از این موارد باشد
تشکیل می دهد:
کتابخانه | نماد
کتابخانه|کلاس|نماد
کتابخانه|FILE=مسیر
کتابخانه باید مسیر کامل کتابخانه مشخص شود (نمیتواند a باشد
نام پایه).
شکل اول علامت گذاری می کند نماد به عنوان خصوصی
شکل دوم علامت گذاری می کند نماد با کلاس جایی که کلاس ممکن است عمومی، خصوصی یا
در حال تکامل
فرم سوم فایل را نشان می دهد مسیر باید در صورت تقاضا باز شود کتابخانه is
برای اولین بار مواجه شد. فایل مسیر شامل خطوط دو شکل اول به جز
کتابخانه رشته. شکل سوم افزایش سرعت برای جلوگیری از پردازش بسیاری از طبقه بندی ها است
خطوطی برای کتابخانه ها که هرگز در اجرا با آنها مواجه نشدند.
-O dbfile
برای تغییر طبقهبندی نمادها برای پویا، یک فایل لغو تعیین کنید
آزمون (عمومی در مقابل خصوصی). فرمت فایل override به این صورت است:
کتابخانه|نماد|کلاس
کتابخانه می تواند مسیر کامل یا نام پایه باشد. اگر کتابخانه "__SKIP__" باشد، نماد
برای هر کتابخانه ای که در آن یافت می شود نادیده گرفته می شود. کلاس می تواند "public" باشد.
"خصوصی"، "در حال تکامل" یا "حذف شده". کلاس "حذف شده" به معنای خاص است
نماد در برخی از نسخه ها از کتابخانه حذف شد. نماد "__ALL__" برای
کلاس "حذف شده" به این معنی است که کل کتابخانه حذف شده است یا در غیر این صورت ناپایدار است
برای استفاده.
مثال:
libfoo.so.1|__bar|خصوصی
/lib/libxyz.so.1|باز|عمومی
__SKIP__|__fputwc_xpg5
این تنظیمات هرگونه طبقه بندی در داخل کتابخانه (از کتابخانه
نسخه سازی، قابل دستیابی از pvs(1) و غیره).
-A لیست فایل
کتابخانه های مورد علاقه ABI را با کتابخانه های فهرست شده در تنظیم کنید لیست فایل (پر شده
نام مسیر، یک در هر خط). فقط تماسهای این کتابخانهها بررسی خواهند شد. همه
تماس های دیگر کتابخانه نادیده گرفته می شود.
-s dbfile -S 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 جمعآوری میشود و به یکباره در نزدیکی پایان اجرا چاپ میشود
هر کار تمام می شود
If مشاغل سپس "-"، "تشخیص" یا "n" است مشاغل بسته به یک عدد تنظیم می شود
تعداد پردازنده های موجود در دستگاه فعلی (اگر بتوان آن را تعیین کرد).
عملگرها
عملگرهای زیر پشتیبانی می شوند:
فایل ها لیستی از اشیاء باینری برنامه برای بررسی.
OUTPUT
هر مشکل یک خط وجود دارد (ممکن است در هر باینری بررسی شده چندین مشکل وجود داشته باشد) که
به شکل زیر نگاه کنید:
اگر مشکلی پیدا نشد:
نام فایل: باشه
در صورت استفاده از نماد خصوصی:
نام فایل: خصوصی (کتابخانه:خصوصی_نسخه) private_sym
در صورت تکامل استفاده از نماد:
نام فایل: در حال تکامل (کتابخانه:در حال تکامل) evolving_sym
اگر فایل به صورت ایستا در یک کتابخانه بایگانی سیستم پیوند خورده باشد:
نام فایل: STATIC_LINK (بایگانی)
اگر بررسی فایل نادیده گرفته شد:
نام فایل: پرش (دلیل)
تحت استفاده از کلاس حذف شده در -O گزینه override file، این مشکلات ممکن است باشد
یافت:
اگر نمادی در یک نسخه از کتابخانه حذف شده است:
نام فایل: DELETED_SYM: نماد/کتابخانه
(کتابخانه اگر نماد بدون قید بود "بدون قید" خواهد بود)
اگر کل کتابخانه در برخی از نسخه ها حذف شده باشد یا در غیر این صورت ناپایدار باشد
استفاده کنید:
نام فایل: UNSTABLE_LIB: کتابخانه-سونام = مسیر کتابخانه
(مسیر کتابخانه ممکن است "فایل یافت نشد" اگر کتابخانه پیدا نشد)
مشکلات زیر باعث یک خطای کشنده می شود مگر اینکه -k گزینه استفاده می شود:
اگر پیوند دهنده پویا نتوانست حل شود N نمادها وقتی ldd -r اجرا شد:
نام فایل: UNBOUND_SYMBOLS: N
اگر پیوند دهنده پویا هیچ پیوند دینامیکی پیدا نکرد:
نام فایل: NO_BINDINGS
If ldd -r با LD_DEBUG=فایلها، پیوندها ناموفق:
نام فایل: LDD_ERROR
در این سه مورد اخیر اجرا می شود ldd -r در فایل باینری برای اطلاعات بیشتر در مورد چیست
اشتباه شد (توجه داشته باشید که ابی چک اجرا می شود ldd -r با LD_DEBUG=فایلها، پیوندها تنظیم). در برخی از
سیستم هایی که پیوند دهنده پویا برنامه های SUID را با آنها پردازش نمی کند LD_DEBUG مجموعه (این معمولا
منجر می شود به NO_BINDINGS در ابی چک خروجی).
توجه داشته باشید که اگر abicheck را در یک کتابخانه مشترک (مثلاً libfoo.so) اجرا می کنید،
است نه ساخته شده است با -l لوب پرچمگذاری میکند تا وابستگیهای کتابخانهاش را ثبت کند، سپس "unbound
مشکل نمادها" بسیار محتمل است. در کنار بازسازی، کار زیادی نمی توان انجام داد
کتابخانه یا بررسی یک برنامه باینری که از کتابخانه استفاده می کند و با استفاده از -l گزینه ای از
ابی چک
خروج وضعیت
مقادیر خروجی زیر برگردانده می شوند:
0 هیچ خطایی و مشکلی پیدا نشد.
1 یک خطای مرگبار رخ داد.
2 هیچ خطای مرگباری رخ نداد، اما برخی از باینری ها مشکلاتی را شناسایی کردند.
NOTES
فقط اشیاء ELF بررسی می شوند.
در -s -S -d و -O dbfiles کاراکتر '#' یک خط نظر را به روش معمول شروع می کند.
مگر اینکه کسی از مطابقت های سفارشی "::" ارائه شده از طریق استفاده کند -p or -e پرچم، abicheck می تواند
فقط کتابخانههای سیستمی را بررسی کنید که نسخهسازی نماد روی آنها اعمال شده است (به عنوان مثال
اطلاعات خصوصی و/یا در حال تکامل ثبت شده برای هر نماد در خود کتابخانه).
برای اطلاعات بیشتر در مورد نسخهسازی نماد، به "راهنمای لینکر و کتابخانه سولاریس" مراجعه کنید.
پاسخنامه در URL http://docs.sun.com/ab2/coll.45.13 و Commands/Version-Script
بخش از صفحه اطلاعات پیوند دهنده گنو "ld".
الگوهای تطبیق نام نسخه نماد پیشفرض، مطابق با حروف کوچک و بزرگ هستند
رشته های "خصوصی" و "تکامل" به ترتیب برای موارد خصوصی و در حال تکامل.
نام فایل های فرد حاوی نویسه تک نقل قول یا خط جدید نادیده گرفته می شود. چنین
کاراکترها با فراخوانی فرامین از طریق پوسته تداخل دارند.
برای بازگشت به دایرکتوری ها استفاده کنید پیدا کردن(1) و یا خروجی را برای استفاده در یک فایل جمع آوری کنید
la -f گزینه یا در یک لوله از طریق:
پیدا کردن ... | abicheck -f - ...
با استفاده از خدمات onworks.net از abicheck آنلاین استفاده کنید