هذا هو الأمر الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
abicheck - تحقق من ثنائيات التطبيق للمكالمات إلى الرموز الخاصة أو المتطورة في
المكتبات والربط الثابت لبعض مكتبات النظام.
موجز
com.abicheck [-h] [-k] [-a] [-I] [-v] [-f ملف القائمة] [-أو ملف خارجي] [-ص نمط] [-ه نمط] [-ي
وظائف] [-ل مكتبة] [-L ldpath] [(-s | -S) ملف] [(-d | -D) ملف] [-O ملف] [-أ
ملف القائمة] ملفات
الوصف
com.abicheck يتم تشغيله على ثنائيات التطبيق ويصدر تحذيرات عند أي مما يلي
تم الكشف عن ثلاثة شروط:
· خاص رمز الاستخدام. الرموز الخاصة هي وظائف أو متغيرات بيانات في المكتبة
الحزمة الداخلية لتلك الحزمة. يتم استخدامها من قبل المكتبات الموجودة في الحزمة
للاتصالات الداخلية وليست جزءًا من مطوري التطبيقات API / ABI
يجب استخدام.
· المتطورة رمز الاستخدام. الرموز المتطورة هي وظائف أو متغيرات بيانات في المكتبة
الحزمة المخصصة لاستهلاك المطور ، ولكن تم تمييزها على أنها "قيد التطوير" أو
"غير مستقر" بمعنى أنها قد تصبح غير متوافقة أو تختفي في إصدار لاحق
من حزمة المكتبة.
· ساكن ربط. الربط الثابت لمكتبات النظام (على سبيل المثال ، libc.a) في ملف
التطبيق بشكل عام ليس فكرة جيدة لأن رمز مكتبة النظام الذي "يقفل" فيه
قد يصبح ملف التطبيق الثنائي غير متوافق مع الإصدارات اللاحقة من النظام. abicheck
يحاول الكشف عن الارتباط الثابت لبعض مكتبات النظام.
السلوك الافتراضي ، لكل كائن ثنائي محدد ، هو فحص المكالمات المباشرة من ذلك
كائن ثنائي فقط. ال -l يسمح الخيار للمكتبات التي يجلبها الكائن الثنائي
تم فحص مكالماتهم أيضًا.
OPTIONS
الخيارات التالية مدعومة:
-k استمر في فحص الثنائيات حتى إذا كانت هناك أخطاء جسيمة (تقارير الرابط الديناميكي
الرموز التي لم يتم حلها ، LDD(1) فشل ، لم يتم الكشف عن رموز).
-h اطبع نموذجًا طويلًا من المساعدة.
-v مطوّل. اطبع معلومات إضافية.
-f ملف القائمة
لقد عادوا ملف القائمة هو ملف يحتوي على قائمة من العناصر الثنائية للتحقق ، واحد في كل سطر.
يتم إلحاق هذه القائمة بأي ملفات يتم توفيرها كوسيطات في سطر الأوامر. لو
ملف القائمة هو "-" ، ثم يتم استخدام stdin.
-o ملف
كتابة الإخراج إلى ملف بدلا من stdout.
-p النمط
تعديل اسم النسخة مطابقة نمط تسمية مجموعات الإصدارات الخاصة. الافتراضي هو
/خاص/ باستخدام تطابق غير حساس لحالة الأحرف.
إذا كان أحد مكونات regex النمط يحتوي على نقطتين متتاليتين: 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 هي السلسلة "find" ، ثم جميع المكتبات المشتركة
in ملفات تم العثور عليها وإدراج مساراتها في موقع "البحث". لاحظ أن
سيكون الترتيب عشوائيًا.
-l مكتبة
أضف الاسم الأساسي أو اسم المسار الكامل للمكتبة المشتركة مكتبة إلى قائمة
الكائنات المراد فحصها لإجراء مكالمات خاصة. قد يحدث هذا الخيار أكثر من
مرة واحدة في سطر الأوامر وهو مضاف. بشكل افتراضي ، المكالمات المباشرة فقط من a
يتم فحص النظام الثنائي لمكتبات النظام. ال -l يسمح التبديل بالتحقق من
المكالمات غير المباشرة على سبيل المثال: app -> supportlib -> systemlib.
-a قم بالتكرار خلال جميع الثنائيات قبل التحقق من قائمة جميع الملفات المشتركة وجمعها
أشياء. خذ الاسم الأساسي لكل كائن مشترك تم العثور عليه وتصرف كما لو كان كذلك
المحدد بامتداد -l الخيار ثم قم بتشغيل الشيكات abicheck. من هنا،
يتم فحص المكالمات الواردة من جميع كائنات "التطبيقات الداخلية" بدلاً من مجرد
مكالمات مباشرة. (مفيد عندما لا تحتوي الكائنات المشتركة على تبعيات
مسجل.)
-I تجاهل المكتبات المشتركة في الفحص ، تحقق فقط من الملفات التنفيذية. متوافق مع -a،
سيتم البحث عن المكتبات أولاً ولكن لا يتم التحقق منها بعد ذلك.
-d dbfile ، -D ملف
تحديد قاعدة بيانات رموز الملفات الثابتة الاحتياطية للديناميكي (عام مقابل خاص)
امتحان. سيتم استخدام هذه التصنيفات إذا لم يتم إصدار إصدارات للمكتبة (على سبيل المثال
التصنيف غير موجود في المكتبة نفسها). يستخدم -D للإشارة إلى ذلك فقط
معلومات من ملف يجب استخدامها. خطوط في ملف يمكن أن يكون واحدًا من هؤلاء
نماذج:
مكتبة | رمز
مكتبة | فئة | رمز
مكتبة | FILE = مسار
مكتبة يجب أن يكون المسار الكامل للمكتبة المراد تحديده (لا يمكن أن يكون ملف
الاسم الأساسي).
علامات النموذج الأول رمز خاصة.
يمثل الشكل الثاني علامات رمز مع فئة أين فئة قد تكون عامة أو خاصة أو
تتطور.
النموذج الثالث يشير إلى الملف مسار يجب أن يفتح عند الطلب عندما مكتبة is
واجه أولا. ملف مسار يحتوي على سطور من النموذجين الأولين باستثناء
مكتبة مجال. النموذج الثالث هو تسريع لتجنب معالجة العديد من التصنيفات
لم تصادف خطوط للمكتبات في المدى.
-O ملف
حدد ملف تجاوز لتعديل تصنيف الرمز للديناميكية
(عام مقابل خاص). تنسيق ملف التجاوز مثل:
مكتبة | رمز | فئة
يمكن أن تكون المكتبة هي المسار الكامل أو الاسم الأساسي. إذا كانت المكتبة هي الرمز "__SKIP__"
سيتم تجاهله لأي مكتبة توجد بها. يمكن أن يكون الفصل "عامًا" ،
"خاص" أو "قيد التطوير" أو "محذوف". الفئة "المحذوفة" ذات غلاف خاص ، يعني
تم حذف الرمز من المكتبة في بعض الإصدارات. الرمز "__ALL__" لـ
الفئة "المحذوفة" تعني أن المكتبة بأكملها قد تم حذفها أو أنها غير مستقرة
ليستخدم.
أمثلة:
libfoo.so.1 | __bar | خاص
/lib/libxyz.so.1|baz|public
__KIP__ | __fputwc_xpg5
تتجاوز هذه الإعدادات أي تصنيف داخل المكتبة (من المكتبة
الإصدار ، يمكن الحصول عليه من ص ف(1) ، إلخ).
-A ملف القائمة
قم بتعيين مكتبات ABI ذات الأهمية للمكتبات المدرجة في ملف القائمة (ممتلئ
اسم المسار ، واحد لكل سطر). سيتم فحص المكالمات الواردة إلى هذه المكتبات فقط ؛ الجميع
سيتم تجاهل مكالمات المكتبة الأخرى.
-s dbfile ، -S ملف
حدد قواعد بيانات رموز أكثر شمولاً لاختبار الارتباط الثابت. ملف قد يكون
قائمة ملفات مفصولة بفواصل. إذا كان الملف عبارة عن أرشيف ثابت (lib * .a) فهو كذلك
معالجتها لاستخراج الرموز. وإلا فهو ملف قاعدة بيانات يتكون من
أسطر رمز النموذج | مكتبة: وحدة نمطية على سبيل المثال:
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 مادبا لإجراء فحص الارتباط الثابت فقط واستخدام قاعدة البيانات الداخلية.
استعمل -s لا شيء or -S لا شيء لتخطي فحص الارتباط الثابت تمامًا.
-j com.njobs
يجري com.njobs بالتوازي كعمليات منفصلة. يدل -k. المقصود في المقام الأول
أجهزة وحدة المعالجة المركزية المتعددة حيث com.njobs يجب أن يكون قريبًا من عدد المعالجات.
يتم جمع المخرجات في ملفات tmp وطباعتها مرة واحدة بالقرب من نهاية التشغيل كملفات
تنتهي كل وظيفة.
If com.njobs هي "-" أو "اكتشاف" أو "n" ، إذن com.njobs سيتم تعيينه إلى رقم بناءً على
عدد المعالجات على الجهاز الحالي (إذا أمكن تحديد ذلك).
العمليات
المعاملات التالية مدعومة:
ملفات قائمة بالكائنات الثنائية للتطبيق المراد التحقق منها.
OUTPUT
يوجد سطر واحد لكل مشكلة (قد يكون هناك عدة مشاكل لكل ثنائي تم فحصه)
تبدو كما يلي:
إذا لم يتم العثور على مشاكل:
اسم الملف: حسنًا
في حالة استخدام الرمز الخاص:
اسم الملف: خاص (مكتبة:إصدار خاص) خاص
في حالة تطور استخدام الرمز:
اسم الملف: تتطور (مكتبة:تطورات) التطور
إذا كان الملف مرتبطًا بشكل ثابت في مكتبة أرشيف النظام:
اسم الملف: STATIC_LINK (أرشيف)
إذا تم تخطي التحقق من الملف:
اسم الملف: يتخطى (سبب)
تحت استخدام الفئة المحذوفة في -O تجاوز خيار الملف ، قد تكون هذه المشاكل
وجدت:
إذا تم حذف رمز من المكتبة في بعض الإصدارات:
اسم الملف:DELETED_SYM: رمز/مكتبة
(مكتبة سيكون "غير منضم" إذا كان الرمز غير منضم)
إذا تم حذف مكتبة بأكملها في بعض الإصدارات أو كانت غير مستقرة
استعمال:
اسم الملف: غير مستقر_LIB: مكتبة سونام = مسار المكتبة
(مسار المكتبة قد يكون "الملف غير موجود" إذا تعذر العثور على المكتبة)
ستؤدي المشكلات التالية إلى حدوث خطأ فادح ما لم يكن ملف -k يستخدم الخيار:
إذا تعذر حل الرابط الديناميكي N عندما الرموز LDD -r كان يركض:
اسم الملف: UNBOUND_SYMBOLS: N
إذا لم يعثر الرابط الديناميكي على روابط ديناميكية:
اسم الملف: NO_BINDINGS
If LDD -r مع LD_DEBUG = ملفات ، روابط فشل:
اسم الملف: LDD_ERROR
في هذه الحالات الثلاث الأخيرة تعمل LDD -r في الملف الثنائي لمزيد من المعلومات حول ماذا
حدث خطأ (لاحظ ذلك com.abicheck يدير LDD -r مع LD_DEBUG = ملفات ، روابط تعيين). على بعض
أنظمة لن يقوم الرابط الديناميكي بمعالجة برامج SUID بها LD_DEBUG مجموعة (هذا عادة
النتائج في NO_BINDINGS في ال com.abicheck انتاج).
لاحظ أنه إذا كنت تقوم بتشغيل التحقق من مكتبة مشتركة (على سبيل المثال ، libfoo.so) فإن ذلك
لديها ليس بنيت مع -l ليب أعلام لتسجيل تبعيات مكتبتها ، ثم "غير منضم
من المحتمل جدًا أن تكون مشكلة الرموز ". لا يوجد الكثير الذي يمكن القيام به إلى جانب إعادة بناء
مكتبة أو التحقق من تطبيق ثنائي يستخدم المكتبة واستخدام -l الخيار
com.abicheck.
EXIT الوضع
يتم إرجاع قيم الخروج التالية:
0 لا توجد أخطاء ولا مشاكل وجدت.
1 حدث خطأ فادح.
2 لم تحدث أخطاء فادحة ، ولكن تم اكتشاف بعض المشكلات في بعض الثنائيات.
الملاحظات
يتم فحص كائنات ELF فقط.
في مجلة -s -S -d و -O dbfiles يبدأ الحرف "#" سطر تعليق بالطريقة المعتادة.
ما لم يكن أحد يستخدم المطابقات المخصصة "::" التي يتم توفيرها عبر ملف -p or -e الأعلام ، يمكن abicheck
تحقق فقط من مكتبات النظام التي تم تطبيق إصدارات الرموز عليها (على سبيل المثال
المعلومات الخاصة و / أو المتطورة المسجلة لكل رمز في المكتبة نفسها).
لمزيد من المعلومات حول إصدار الرموز ، راجع "دليل مكتبات ووصلة Solaris"
كتاب الإجابة على عنوان URL http://docs.sun.com/ab2/coll.45.13 والأوامر / الإصدار النصي
قسم من صفحة معلومات رابط جنو "LD".
أنماط مطابقة اسم إصدار الرمز الافتراضي هي مطابقة غير حساسة لحالة الأحرف مع
سلاسل "خاصة" و "متطورة" للقضايا الخاصة والمتطورة ، على التوالي.
سيتم تخطي أسماء الملفات الفردية التي تحتوي على حرف اقتباس مفرد أو سطر جديد ؛ هذه
تتداخل الأحرف مع أوامر الاستدعاء عبر الغلاف.
لتكرار استخدام الدلائل جد(1) وقم بتجميع الإخراج إلى ملف لاستخدامه مع
ال -f الخيار ، أو في الأنبوب عبر:
تجد ... | abicheck -f - ...
استخدم abicheck عبر الإنترنت باستخدام خدمات onworks.net