アキラのITメモ:C言語
シリアルポートの通信
Windows上にてシリアルポートを使った通信をしようと思い、JAVAやPerl、Cなどいろいろな言語で試してみたのですがなかなかうまくいかず、結局cygwin+C言語で書きました。以下はその時のメモです。ここのプログラムを参考にしました。
乱数の初期化とtime関数
とある乱数を使うプログラムを作って、何回か動作させてみたのですが、どうも一定期間同じ出力を出しているようでどうしたものかとソースコードをみていたのですが、srand(time(NULL));とやっていました。乱数のシードを初期化する方法としてはよく以下のような方法が使われるのですが、
ヘッダファイルをコンパイル
大昔に作ったプログラムを再度動かそうとコンパイルしたのですが、gcc: compilation of header file requested というエラーがでて何だろうと思ってMakefileを見ていたら、以下のようなコンパイルをしようとしていました。
/bin/shを実行するコード
バッファオーバーフローについて勉強していたのですが、/bin/shを実行するコードを見つけたのでここにメモしておきます。IPA セキュアプログラミング講座で紹介されているコードです。
バッファオーバーフローの確認
以下は、gets()関数によるバッファオーバフローの簡単な実験用プログラムです。年末年始の帰省の折に電車内で暇だったのでパソコンを開いて適当に作ってました。もちろん人はそれほどいなかったので出来たのですが。ちなみに、バッファオーバーフローでリターンアドレスをうまく書き換えることができれば任意のコードを実行できるのですが、その辺りの話はまたいずれということにします。。ここでは簡単にバッファがオーバーフローするという点のみプログラムにより確認します。
if文を代用する
またC言語の使えないネタです。Perlでは良く使われているテクニックなのですが、if (A) B; なら A && B;,if (!A) B; なら A||Bでif文を代用できます。
変なswitch文
C言語では、if(0)の次の文は飛ばされます。また、switch文で飛んできたものは実行できます。そういうことで、以下のような変なコードを書くことが出来ます。
サイト内検索
カテゴリ
- Linux
- Linux Tips [14]
- Linux ソフトウェア [3]
- Web技術
- (X)HTML/CSS [4]
- JavaScript [1]
- MovableType [7]
- その他 [3]
- 各種API [3]
- 各種ツール [4]
- Windows
- Win Tips [3]
- Win ソフトウェア [6]
- コネタ [7]
- プログラミング
- 機器 [4]