#llvm วิเคราะห์และแปลงผ่าน
โครงการนี้ใช้ Clang และ LLVM เพื่อวิเคราะห์และแปลงซอร์สโค้ด C ++
Clang เป็นส่วนหน้าของ LLVM มันรวบรวม C ++ ลงใน IR การเป็นตัวแทนระดับกลางนั้นง่ายกว่ามากจากนั้น C ++ ทำให้ง่ายต่อการวิเคราะห์และแปลง
LLVM มีห้องสมุดที่หลากหลายที่สามารถใช้ในการวิเคราะห์และแปลง IR คำแนะนำสำหรับการวิเคราะห์หรือการเปลี่ยนแปลงเรียกว่าผ่าน
วิดีโอสาธิตของบัตรผ่าน
Done See BelowDone See BelowLLVM และ Clang จำเป็นต้องรวบรวมและใช้บัตรผ่าน ต้องใช้ CMAKE เพื่อสร้าง LLVM และ Clang
Clang ใช้ในการรวบรวม C ++ ถึง bytecode LLVM ใช้เพื่อรวมการวิเคราะห์ผ่าน StaticCount Pass จะต้องผ่านคำสั่งทุกคำแนะนำใน ByEtecode และพิมพ์ว่ามันเป็นประเภทใด นอกจากนี้ยังใช้ LLVM เพื่อติดตามสถิติใบรับรองซึ่งพิมพ์ออกมาในตอนท้ายของการวิเคราะห์
ก่อนที่จะทำตามคู่มือนี้คุณควรดาวน์โหลดและสร้าง LLVM
โครงการและคู่มือนี้ทำโดยใช้ MacOS
เพื่อที่จะใช้รหัสผ่านไปยังรหัส C บางขั้นตอนมีหลายขั้นตอนที่ต้องใช้งานได้พวกเขามีดังนี้
<LLVM_Source_Directory>/lib/TransformsStaticCount จากที่เก็บโคลนลงในไดเรกทอรีที่ระบุไว้ข้างต้นTransforms ควรมีไดเรกทอรีจำนวนหนึ่งและมีเพียงไฟล์ CMakeLists.txt เท่านั้นCMakeLists.txt และเพิ่มบรรทัด add_subdirectory(StaticCount)<LLVM_Build_Directory> ของคุณและเรียกใช้ cmake --build . สิ่งนี้จะสร้าง LLVM ทั้งหมดรวมถึงบัตรผ่านที่เราเพิ่งเพิ่มHeapTimeTestProgram ภายในที่เก็บโคลนclang -O0 -emit-llvm -c main.cpp -o bctest.bc สิ่งนี้ใช้เสียงดังกึกก้องเพื่อรวบรวมไฟล์ C ++ ของเราลงไปที่ bytecode ที่ LLVM สามารถทำงานได้opt -load <LLVM_Build_Directory>/lib/llvmstaticcount.dylib -StaticCount -stats< bctest.bc > /dev/null สถิติที่พิมพ์เป็นผลมาจากการวิเคราะห์แบบคงที่โดยใช้ LLVM
หมายเหตุ - นี่ไม่ใช่ผลลัพธ์ที่สมบูรณ์ของบัตรผ่าน มันลดลงเพื่อให้เห็นคำสั่งข้างต้น
ปัญหา? กรุณาติดต่อฉัน
Clang ใช้ในการรวบรวม C ++ ถึง Bytecode LLVM ใช้เพื่อรวมการวิเคราะห์ผ่าน DynCount Pass จะต้องผ่านบล็อกพื้นฐานทุกบล็อกใน ByEtecode และเพิ่มการโทรไปยังไลบรารีรันไทม์ ฟังก์ชั่นในไลบรารีเป็นเพียงสถิติเอาต์พุตสำหรับเหตุการณ์สำคัญนี้
ครั้งแรกที่ผ่านถูกรวบรวมเช่นเดียวกับอันแรกต่อไปเราจะรวบรวมโปรแกรมทดสอบลงใน bytecode หลังจากนั้นไลบรารีรันไทม์จะถูกรวบรวมเป็น bytecode ไฟล์สองไฟล์นี้จะเชื่อมโยงกับไฟล์ bytecode เดียวโดยใช้ LLVM หลังจากนี้จะมีการใช้บัตรผ่านซึ่งแตกต่างจากในรอบแรกจะไม่มีการส่งออก ณ จุดนั้น เนื่องจากนี่คือบัตรผ่านแบบไดนามิกเราจะได้ผลลัพธ์ที่รันไทม์ ในที่สุดเราก็เรียกใช้โปรแกรมและรับผลลัพธ์ของเราจะมีการกำหนดค่าเอาท์พุทในทุกช่วงเวลาของประเภทบล็อกพื้นฐานที่แตกต่างกันหลายประเภท
ก่อนที่จะทำตามคู่มือนี้คุณควรดาวน์โหลดและสร้าง LLVM
โครงการและคู่มือนี้ทำโดยใช้ MacOS
ในการใช้รหัสผ่านไปยัง C มีหลายขั้นตอนที่ต้องใช้งานได้พวกเขามีดังนี้
<LLVM_Source_Directory>/lib/TransformsDynCount จากที่เก็บโคลนลงในไดเรกทอรีที่ระบุไว้ข้างต้นTransforms ควรมีไดเรกทอรีจำนวนหนึ่งและมีเพียงไฟล์ CMakeLists.txt เท่านั้นCMakeLists.txt และเพิ่มบรรทัด add_subdirectory(DynCount)<LLVM_Build_Directory> ของคุณและเรียกใช้ cmake --build . สิ่งนี้จะสร้าง LLVM ทั้งหมดรวมถึงบัตรผ่านที่เราเพิ่งเพิ่มSmallTestProgram ภายในที่เก็บโคลนclang -O0 -emit-llvm -c smallProgram.c -o sp.bc สิ่งนี้ใช้เสียงดังกึกก้องเพื่อรวบรวมไฟล์ c ของเราลงไปที่รหัสที่ LLVM สามารถทำงานได้clang -O0 -emit-llvm -c print -o p.bc สิ่งนี้ใช้เสียงดังก้องเพื่อรวบรวมไลบรารีรันไทม์ของเราลงไปที่ ByTeCode ที่สามารถเชื่อมโยงกับโปรแกรมที่เรารวบรวมไว้ด้านบนllvm-link p.bc sp.bc -S -o smallprogramandprint.bc นี่เป็นการเชื่อมโยงโปรแกรมของเราที่จะวิเคราะห์และห้องสมุดรันไทม์ของเราopt -load <LLVM_Build_Directory>/lib/llvmDynCount.dylib -DynCount <smallprogramandprint.bc> instrumentedprogram.bc สิ่งนี้ใช้งานผ่านโปรแกรมแก้ไขไบต์ด้วยการโทรไปยังไลบรารีรันไทม์lli instrumentedprogram.bc สิ่งนี้เรียกใช้โปรแกรมเครื่องมือเพื่อให้เราสามารถเห็นผลลัพธ์ของการผ่าน 
หมายเหตุ - นี่ไม่ใช่ผลลัพธ์ที่สมบูรณ์ของบัตรผ่าน มันลดลงเพื่อให้เห็นคำสั่งข้างต้น
ปัญหา? กรุณาติดต่อฉัน