プログラミング

共有ライブラリを認識させる

OSは、Fedora17を利用しています。 libdwarf.soという共有ライブラリを手動で/usr/local/libディレクトリにインストールした時の話です。 /libディレクトリと/usr/libディレクトリはデフォルトで共有ライブラリーの含まれていますが、FedoraやCentOSでは/usr…

fcallについて

fcall,libffiで実行時にシグネチャーを指定して関数を呼び出すことができます。 実行時に困ったので、困ったところのみメモして置きます。fcallは、-lavcall libffiは、-lffi をそれぞれリンクすると使える。 参考文献 Binary Hacks

libfdのリンクに失敗する問題

ls -al /usr/lib/libbfd.so自体はいるが、リンクエラーになる。 通常、シンボリックリンクになっているはずらしいが、lsコマンドで見てもリンク先が表示されなかった。そのため、ls -al /usr/lib/libbfd*をすると/usr/lib/libbfd-2.22.52.0.1-10.fc17.soがあ…

プログラムがmain()にたどりつくまで

この話は、最近読んでいるBinary Hacks ―ハッカー秘伝のテクニック100選作者: 高林哲,鵜飼文敏,佐藤祐介,浜地慎一郎,首藤一幸出版社/メーカー: オライリー・ジャパン発売日: 2006/11/14メディア: 単行本(ソフトカバー)購入: 23人 クリック: 383回この商品…

bashとglibcのソース

オープンソースはソースコードが誰にでも無料で公開されています. linuxやそのツール郡は, すべてオープンソースです. 普段お世話になっている基本的なソフトウエアは、GNUプロジェクトで公開されています。http://www.gnu.org/software/software.html bash…

非同期シグナルを同期的に扱う

sigwaitを利用して、シグナル受信スレッドを作成してしまおうというのがアイディア。 #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <signal.h> #include <stdio.h> void *wait_for_sighup(void *dmy) { int sig; //sig_wait関数はSIGHUPを待つ sigset_t ss; sigemptyset(&ss); sigad</stdio.h></signal.h></sys/select.h></sys/time.h></pthread.h>…

Javaでシグナルをキャッチする

linuxではお馴染み、シグナルをjavaでキャッチする方法です。 SIGHUPをキャッチします。vim sample.java import sun.misc.Signal; import sun.misc.SignalHandler; class SignalTest { static int sig = 0; public static void main(String[] args) { Signal…

LinuxでJava開発

linuxでJavaの開発をするためにjavacをインストールしました。 インストール方法のメモです。 rootで下記をインストール yum install java-1.7.0-openjdk-develテストです。 vim sampleTest.java class Sample { public static void main(String[] args) { }…

D_FORTIFY_SOURCEを使う

これもバッファーオーバーフロー検出に関するお話。 gcc4からの機能です。使い方 (o1以上の最適化オプションをつける) gcc -O1 -D_FORTIFY_SOURCE=1 foo.c検出時は、下記のいずれか コンパイル時 実行時 これの機能のすごいとこは、リリースビルドで使えると…

Mudflapを使う

gcc4から使える機能です。バッファーオーバーフロー検出ツールです。 メモリの割り当てとして、ヒープ領域、bss領域、stack領域などがあります。このツールでは、下記のようなケースが検出されました。 /* test.c */ static char onbss[128]; int main(void)…