良い一日。 今日は、RD FSTEC(要求されていない機能がないことの制御)の要件に従って、コード認証作業の一部を実行する方法について説明します。 静的解析の要件には、ファイルのコンパイルを制御する要件、またはすべてのファイルがオブジェクトファイルにコンパイルされるかどうか、およびコンパイルできないファイルがあるかどうかの質問に答える要件があります。 これを行うには、ファイルのリストをcpp、c、hにします。 これを行うには、ソースフォルダーに移動し、コマンド「find。」を実行します。 -iname * .cpp "、"検索。 -iname * .c "、"検索。 -iname * .o "出力をファイルに書き込む" c_cpp_files.txt "and" h_files.txt "。
次の内容のファイルを取得します。
./arch/powerpc/math-emu/fmul.c
./arch/powerpc/math-emu/lfd.c
./arch/powerpc/math-emu/fsqrt.c
./arch/powerpc/math-emu/fsub.c
./arch/powerpc/math-emu/fnmsub.c
./arch/powerpc/math-emu/frsqrte.c
./arch/powerpc/math-emu/mtfsb0.c
...
したがって、次のとおりです。
./arch/powerpc/include/asm/udbg.h
./arch/powerpc/include/asm/termios.h
./arch/powerpc/include/asm/immap_cpm2.h
./arch/powerpc/include/asm/linkage.h
./arch/powerpc/include/asm/rio.h
./arch/powerpc/include/asm/dma-mapping.h
...
次に、どのInclude-sがどの* .cまたは* .cppファイルにあるかを分析します。 次のコードはこのためのものです。
Incl.javaファイル:
public class Incl { public String text; public int line; }
InclPoints.javaファイル:
import java.io.File; import java.util.List; public class InclPoints { public File headers; public List<Point> points; }
Includes.javaファイル:
import java.io.File; import java.util.ArrayList; import java.util.List; public class Includes { public File file;
Point.javaファイル:
import java.io.File; public class Point { public File src; public Incl incl; }
Main.javaファイル:
import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static File reportFile; public static File header_file; public static File sources_file; public static Map<Integer,File> headers_nouse; public static Map<Integer,File> headers_withuse; public static int header_nouse_counter; public static int header_withuse_counter; private static List<InclPoints> incpo_lst;
アルゴリズムは次のとおりです。
まず、/ cppを使用してファイルを調べ、正規表現を使用して#include <...>ディレクティブを探します。ファイルの指定されたドレインと行番号を覚えています。 次に、見つかった各構成要素について、hファイルのインクルードを確認します。 その結果、* .hファイルについても同じことを確認します。 hファイルがどこかに接続されていない場合、つまり、使用されている* .hファイルで接続されている可能性がある場合、このため、接続された* .hファイルで* .hファイル接続の存在をもう一度確認します。
その結果、次の形式のレポートを作成します。
Proccessing Level 1 dependencies
Header file : ./arch/powerpc/include/asm/udbg.h
usage : ./arch/powerpc/platforms/85xx/izgib.c
line : #include <asm/udbg.h>
usage : ./arch/powerpc/sysdev/cpm_common.c
line : #include <asm/udbg.h>
usage : ./arch/powerpc/kernel/legacy_serial.c
line : #include <asm/udbg.h>
usage : ./arch/powerpc/kernel/setup-common.c
line : #include <asm/udbg.h>
usage : ./arch/powerpc/kernel/setup_32.c
line : #include <asm/udbg.h>
usage : ./arch/powerpc/kernel/udbg.c
line : #include <asm/udbg.h>
usage : ./arch/powerpc/kernel/irq.c
line : #include <asm/udbg.h>
usage : ./arch/powerpc/kernel/udbg_16550.c
line : #include <asm/udbg.h>
Number of entries = 8
Header file : ./arch/powerpc/include/asm/termios.h
usage : ./net/unix/af_unix.c
line : #include <linux/termios.h>
usage : ./net/netlink/af_netlink.c
line : #include <linux/termios.h>
usage : ./drivers/tty/tty_ioctl.c
line : #include <linux/termios.h>
Number of entries = 3
…