โมดูลที่ตรวจสอบการสลับอาร์กิวเมนต์ในการเรียกใช้ฟังก์ชัน ตัวอย่างเช่นไลบรารีสามารถใช้ตรวจจับการแลกเปลี่ยนในรหัสเช่น:
/* 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 หากคุณไม่ได้ติดตั้งนินจาคุณสามารถใช้ -G "Unix Makefiles" เพื่อสร้าง makeFiles แทนและสร้างโดยใช้ make -j
มีคำเตือน Linker เกี่ยวกับการใช้ tmpnam API นี้ถูกใช้โดยโครงสร้างพื้นฐานการทดสอบเพื่อสร้างฐานข้อมูลสถิติชั่วคราวและไม่ได้ใช้เป็นส่วนหนึ่งของ API ตัวตรวจสอบอาร์กิวเมนต์ Swapped
../../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 ค่าเริ่มต้น: เปิด |
SWAPPED_ARGS_BUILD_TESTS | ช่วยให้การทดสอบอาคาร ค่าเริ่มต้น: เปิด |
SWAPPED_ARGS_BUILD_PYTHON | เปิดใช้งานการสร้างส่วนขยาย Python ค่าเริ่มต้น: ปิด |
SWAPPED_ARGS_INSTALL_PYTHON | เปิดใช้งานการติดตั้งส่วนขยาย Python หากสร้างขึ้น ค่าเริ่มต้น: ปิด |
เป็นส่วนหนึ่งของการกำหนดค่า CMAKE สาขาหลักล่าสุดของ GoogleTest จะถูกดาวน์โหลดและสร้างหากเปิดใช้งานฟังก์ชั่นการทดสอบ
ในการเรียกใช้การทดสอบหน่วย C ++ ตรวจสอบให้แน่ใจว่า SWAPPED_ARGS_BUILD_TESTS ไม่ได้ปิดใช้งานเมื่อกำหนดค่าโครงการ CMAKE TestSwappedArgsCpp เรียกใช้งานได้จะถูกสร้างขึ้นในการสร้างที่ประสบความสำเร็จและสามารถเรียกใช้เพื่อทำการทดสอบหน่วย
ในการเรียกใช้การทดสอบปลั๊กอิน Clang คุณสามารถดำเนินการ cmake --build . --target check-all จากไดเรกทอรี CMake Build
เราขยายแนวคิดและอัลกอริทึมที่อยู่เบื้องหลังเครื่องตรวจจับการแลกเปลี่ยนในรายงานการวิจัยที่ตีพิมพ์ในการวิเคราะห์ซอร์สโค้ด IEEE และการประชุมการจัดการ IEEE 2020 โปรดทราบว่าไม่ใช่อัลกอริทึมฮิวริสติกและคุณสมบัติที่อธิบายไว้ในรายงานการวิจัยทั้งหมดในการนำไปใช้งานนี้
เนื้อหานี้มีพื้นฐานมาจากการวิจัยที่ได้รับการสนับสนุนจากสำนักงานความมั่นคงแห่งมาตุภูมิ (DHS) สำนักงานฝ่ายดำเนินงานด้านการจัดซื้อจัดจ้างแผนกการซื้อกิจการ S&T ผ่านหมายเลขสัญญา 70RSAT19C00000056 มุมมองและข้อสรุปที่มีอยู่ในที่นี้เป็นของผู้เขียนและไม่ควรตีความว่าจำเป็นต้องเป็นตัวแทนของนโยบายหรือการรับรองอย่างเป็นทางการไม่ว่าจะเป็นการแสดงหรือโดยนัยของกระทรวงความมั่นคงแห่งมาตุภูมิ