1

LLVM でプログラム内の可能なパスを見つけようとしています。現在、コード内のすべての関数の入口から出口 BB までのパスを見つけることができます。しかし、それは私が必要とするものではありません。私が必要としているのは、CFG を拡張して (おそらく関数呼び出しをインライン化することで?!)、ソース コード全体の CFG を持ち、この拡張された CFG 内のパスを見つけることです。最初に -inline パスを使用して最初にすべての関数をインライン化し、次にパスファインダー パスを実行することを考えていましたが、観察したように、-inline はコード (cpp ファイル) でインラインで明示的に言及されている関数に対してのみ機能します。何百もの関数を調べて、それらすべてにインラインを追加することはできません。また、すべての呼び出しがインライン化され、呼び出しが失われないことを保証する必要もあります。インライン化が私の唯一のオプションであるか、それがオプションであるかさえわかりません。これについての考えは大歓迎です。

**明らかに、私のソース コードには再帰呼び出しはありません。

4

1 に答える 1

-4

何を求めているのか完全にはわかりませんが、ほぼすべてのプログラム言語を使用して source.cpp と source.h を解析し、関数の宣言/定義を見つけてinline、いくつかのルールに基づいて追加することができます。

基本的に、source.cpp を .txt として扱い、任意の API を使用してファイルを .txt として取得しますchar *。を検索して(から、パラメーターと終了を検索します)

// FindFunctions.cpp
#include "..."
...

char * AddFuncDecChars( _In_ char * file, char * stringToBeInserted)
{
    //Find possible functions with `()`.
    int[] PossFuncs = FindParenths(File);
    // Check to see if space delimited block followed by another block or
    // multiple space delimited blocks with commas.
    int[] VerifiedParens HasSpaceDelimWithPossibleCommas( PossFuncs, 
    File);
    char * Change InsertStringToFunc( File, VerifiedParen,
    stringToBeInserted);
    return Change;
} 

また、cpp ではなくヘッダーに定義が必要なため、とのペアinlineを取り込んでヘッダーに追加する必要がある場合があります。.h.cpp

于 2016-05-20T04:33:50.980 に答える