簡體   English   中英

LLVM Clang C ++代碼注入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM