#LLVM分析和轉換通行證
該項目使用Clang和LLVM分析和轉換C ++源代碼。
Clang是LLVM的前端,它將C ++編譯為IR。中間表示比C ++更簡單,使分析和轉換更容易。
LLVM有多種可用於分析和轉換IR的庫。分析或轉換的說明稱為通行證。
通行證的視頻演示
Done See BelowDone See Below需要LLVM和Clang來編譯和應用通行證。構建LLVM和Clang需要CMAKE。
clang用於將C ++編譯為字節碼LLVM用於隱含分析通過StaticCount Pass通過Byetecode中的每個指令,並打印出它是什麼類型。它還使用LLVM來跟踪分析結束時打印出來的Certian統計信息。
在遵循本指南之前,您應該已經下載並構建了LLVM。
該項目和指南是使用MacOS製作的。
為了將通行證應用於某些C代碼,必須採用許多步驟,如下所示。
<LLVM_Source_Directory>/lib/Transforms 。StaticCount到上面列出的目錄中。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這使用clang將我們的C ++文件編譯為LLVM可以使用的字節碼。opt -load <LLVM_Build_Directory>/lib/llvmstaticcount.dylib -StaticCount -stats< bctest.bc > /dev/null the Printed Statments是使用LLVM進行靜態分析的結果。
注意 - 這不是通行證的完整輸出。它減少了,以使上面的命令可見。
麻煩?請與我聯繫。
Clang用於將C ++編譯到字節碼LLVM用於暗示分析通過DynCount Pass通過Byetecode中的每個基本塊,並將調用添加到運行時庫中。庫中的功能僅是該里程碑的輸出措施。
首先,通行證就像第一個通行證一樣,接下來,我們將測試程序編譯到字節碼中。之後,將運行時庫編譯到字節碼中。然後,使用LLVM將這兩個字節碼文件鏈接到一個單字節文件中。在此之後,應用了通行證,與第一次通過不同,此時將沒有輸出。由於這是一個動態通行證,我們將在運行時獲得結果。最後,我們運行該程序並獲得結果,在幾種不同的基本塊類型的每一次情況下都會有輸出措施。
在遵循本指南之前,您應該已經下載並構建了LLVM。
該項目和指南是使用MacOS製作的。
為了將通行證應用於C代碼,必須採用許多步驟,如下所示。
<LLVM_Source_Directory>/lib/Transforms 。DynCount到上面列出的目錄。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這使用clang將我們的c文件編譯為LLVM可以使用的字節碼。clang -O0 -emit-llvm -c print -o p.bc這使用clang將我們的運行時庫彙編為可以與我們上面編譯的程序鏈接的字節碼。llvm-link p.bc sp.bc -S -o smallprogramandprint.bc此鏈接我們的程序進行分析和運行時庫。opt -load <LLVM_Build_Directory>/lib/llvmDynCount.dylib -DynCount <smallprogramandprint.bc> instrumentedprogram.bc這將通行證應用於程序中,將bytecode與我們鏈接到其鏈接到它的運行時庫進行修改。lli instrumentedprogram.bc它運行了儀器程序,以便我們可以看到通行證的結果。 
注意 - 這不是通行證的完整輸出。它減少了,以使上面的命令可見。
麻煩?請與我聯繫。