الوحدة النمطية التي تتحقق من الوسيطات التي يتم تبديلها في مكالمات الوظائف. على سبيل المثال ، يمكن استخدام المكتبة للكشف عن المقايضات في رمز مثل:
/* Apparent swap of 'e' and 'n' based on parameter names. */
RSA_get0_key ( rkey , & e , & n , NULL );git clone https://github.com/llvm/llvm-project.git
git checkout llvmorg-10.0.0mkdir llvm-build ; pushd llvm-build
cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_ASSERTIONS=1 -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_INSTALL_UTILS=1 -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TOOL_CLANG_BUILD=1 -DCMAKE_INSTALL_PREFIX= $PWD /../llvm-install ../llvm-src
cmake --build . --target check-clang
cmake --build . --target install
popdpip install --user lit
export PATH= $PATH : $HOME /.local/binmkdir build ; cd build
cmake -G Ninja -DLLVM_EXTERNAL_LIT= $( which lit ) -DSWAPPED_ARGS_BUILD_CLANG_PLUGIN=ON -DCMAKE_PREFIX_PATH= $PWD /../../llvm-install/lib/cmake ~ /path/to/swap-detector
cmake --build . --target check-all إذا لم يكن لديك تثبيت Ninja ، فيمكنك استخدام -G "Unix Makefiles" لإنشاء Makefiles بدلاً من ذلك وبناء باستخدام make -j .
هناك تحذير رابط حول استخدام tmpnam . يتم استخدام API هذه فقط من قبل البنية التحتية للاختبار لإنشاء قاعدة بيانات إحصائية مؤقتة ، ولا يتم استخدامها كجزء من واجهة برمجة تطبيقات Checker Checker التي تم تبديلها.
../../llvm-install/bin/scan-build -load-plugin lib/SwapDetectorPlugin.so -enable-checker gt.SwapDetector -analyzer-config gt.SwapDetector:ModelPath=sample.db clang++ ~ /dummy.cpp يحتوي الدليل الجذري للمستودع على قاعدة بيانات عينة ، تسمى sample.db ، والتي يمكن استخدامها لاستكشاف سلوك المكتبة. لم تكتمل قاعدة البيانات هذه (لا تغطي سوى عشر وظائف) ، ولكنها تحتوي على معلومات مفيدة إحصائياً حول الوظائف التي تغطيها.
| خيار | وصف |
|---|---|
SWAPPED_ARGS_BUILD_CLANG_PLUGIN | يتيح بناء البرنامج المساعد Clang. الافتراضي: ON |
SWAPPED_ARGS_BUILD_TESTS | يتيح اختبارات البناء. الافتراضي: ON |
SWAPPED_ARGS_BUILD_PYTHON | يتيح بناء امتداد Python. الافتراضي: OFF |
SWAPPED_ARGS_INSTALL_PYTHON | يتيح تثبيت امتداد Python إذا تم بناؤه. الافتراضي: OFF |
كجزء من تكوين CMake ، يتم تنزيل أحدث فرع رئيسي لـ GoogleTest وتم بناؤه إذا تم تمكين وظيفة الاختبار.
لتشغيل اختبارات وحدة C ++ ، تأكد من عدم تعطيل SWAPPED_ARGS_BUILD_TESTS عند تكوين مشروع CMake. سيتم إنشاء TestSwappedArgsCpp القابل للتنفيذ عند الإنشاء الناجح ويمكن تشغيله لإجراء اختبار الوحدة.
لتشغيل اختبارات البرنامج المساعد Clang ، يمكنك تنفيذ cmake --build . --target check-all من دليل بناء CMAKE.
نحن نوسع في المفاهيم والخوارزميات وراء كاشف المبادلة في ورقة بحثية ، نُشرت في مؤتمر تحليل كود المصدر IEEE 2020. لاحظ أنه ليس كل الخوارزميات ، والاستدلال ، والميزات الموضحة في ورقة البحث موجودة في هذا التنفيذ.
تعتمد هذه المادة على الأبحاث التي يرعاها مكتب وزارة الأمن الداخلي (DHS) لعمليات المشتريات ، قسم الاستحواذ على S&T عبر العقد رقم 70RSAT19C00000056. وجهات النظر والاستنتاجات الواردة هنا هي تلك الخاصة بالمؤلفين ويجب عدم تفسيرها على أنها تمثل بالضرورة السياسات أو الموافقات الرسمية ، إما المعبر عنها أو الضمني ، لوزارة الأمن الداخلي.