[英]LLVM Clang C++ code injection
我對在LLVM Clang中實現代碼注入功能感到困惑。 我基本上想在源代碼中創建變量或指針之前添加一個函數。 例:
#include <iostream>
int main() {
int a;
return 0;
}
至
#include <iostream>
int main() {
foo();
int a;
return 0;
}
我閱讀了LLVM文檔以找到答案,但是找不到。 請幫我。 先感謝您。
第一步是確定要在Clang還是LLVM中執行此操作。 盡管它們是“連接的”,但它們不是同一回事。 在clang中,您可以在AST級別上執行此操作,在這種情況下,您需要編寫一個遞歸AST-visitor,並從中標識要檢測的函數定義-插入AST以調用foo
函數。 這僅適用於由編譯器實現的功能。
在此處有有關如何編寫此類訪問者的信息: https : //clang.llvm.org/docs/RAVFrontendAction.html
在LLVM中,您可以編寫函數傳遞,將代碼插入每個函數。 顯然,這適用於任何功能,與語言無關。
如何編寫LLVM通行證: http : //llvm.org/docs/WritingAnLLVMPass.html
但是,盡管一開始看似微不足道,但還是有一些有趣的怪癖。 在LLVM函數中,應首先分配alloca
指令,因此您將不得不“跳過”這些函數。 可能會有一些“不應該被檢測”的函數-例如,如果您的函數foo
使用cout << something;
打印cout << something;
,將foo
插入operator<<(ostream&, ...)
類型的函數...;)會是一個非常糟糕的主意,而且您顯然不想檢測foo
本身或它調用的任何函數。
在Clang中,您可以通過多種方法確定源是“主文件”還是某些頭文件-盡管在您的情況下可能還不夠。 在LLVM中確定“這是哪個功能”要困難得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.