構文チェッカーを作ろうと考えています。
Posted: 2015年5月17日(日) 09:55
C言語で構文チェッカーを作ろうと考えています。
コンパイラが見逃してしまうようなエラーを、プログラムのコードを静的に検査し、問題のある記述法をしている個所を検出し、アドバイスを出すようなプログラムを開発したいです。
例えば、関数を呼び出したときに、入力データがバッファ領域を超える長さの時、バッファオーバーフローが引き起こされ、リターンアドレスを書きかえることで、悪意のあるコードが実行されてしまうことがあります。
これを防ぐために入力データの長さをチェックするように促すようなアドバイスを出せるようにしたいです。
プログラムを静的検査するとなると、形態素解析によって、プログラムのコードという長い文字列の中にある、型や変数、関数などの分類をして、プログラムの構成をコンピュータに理解させる必要があると思います。
このプログラムの形態素解析をどのような方法でやればよいのかわかりません。
例えば、次のような関数があったとします。
func は char 型のポインタ変数 s1 を引数として受け取り,char 型の配列 s2 に s1 が指す文字列をコピーします.ここで,s1 の指す文字列のサイズが s2 のサイズを超えていた場合,3 行目の strcpy(s2,s1) でバッファオーバーフローが発生します.バッファオーバーフローが発生するとあふれたデータによってスタックが破壊 (書き換え) されてしまいます.
これに対して、「s1とs2の長さを確認してください」というようなコメントが出せるようにしたいです。
どのような手順で進めていけばよいのかわかりません。
形態素解析でなくても何かほかによりよいやり方があれば教えてください。
よろしくお願いいたします。
コンパイラが見逃してしまうようなエラーを、プログラムのコードを静的に検査し、問題のある記述法をしている個所を検出し、アドバイスを出すようなプログラムを開発したいです。
例えば、関数を呼び出したときに、入力データがバッファ領域を超える長さの時、バッファオーバーフローが引き起こされ、リターンアドレスを書きかえることで、悪意のあるコードが実行されてしまうことがあります。
これを防ぐために入力データの長さをチェックするように促すようなアドバイスを出せるようにしたいです。
プログラムを静的検査するとなると、形態素解析によって、プログラムのコードという長い文字列の中にある、型や変数、関数などの分類をして、プログラムの構成をコンピュータに理解させる必要があると思います。
このプログラムの形態素解析をどのような方法でやればよいのかわかりません。
例えば、次のような関数があったとします。
func は char 型のポインタ変数 s1 を引数として受け取り,char 型の配列 s2 に s1 が指す文字列をコピーします.ここで,s1 の指す文字列のサイズが s2 のサイズを超えていた場合,3 行目の strcpy(s2,s1) でバッファオーバーフローが発生します.バッファオーバーフローが発生するとあふれたデータによってスタックが破壊 (書き換え) されてしまいます.
これに対して、「s1とs2の長さを確認してください」というようなコメントが出せるようにしたいです。
どのような手順で進めていけばよいのかわかりません。
形態素解析でなくても何かほかによりよいやり方があれば教えてください。
よろしくお願いいたします。