ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

C/C++

AOPっぽいC言語(関数へのenter/exitをフックする)

BINARY HACKS p300まずは写経。 taka@ubuntu:~$ more aop.c #include __attribute__((no_instrument_function)) void __cyg_profile_func_enter(void *func_address, void *call_site) { printf("function start %p %p\n", func_address, call_site); } __at…

straceでシステムコールをトレースする

BINARY HACKS p311straceってのは、 ptrace(PTRACE_SYSCALL, ...)でシステムコールの入り口と出口をフックして、システムコールの引数と戻り値を出力することです。 とのことです。AOPっぽい?普通にHello, Worldを書いて試してみる。 taka@ubuntu:~$ more h…

一つのプロセスが開けるファイルの数がリミットより3つ少ないわけ。

以前のエントリ 一つのプロセスが開けるファイルの数はいくつ?(分からずじまい) で、リミットは2048なのに、アプリケーションから開けるファイルは2045である。という疑問が放置されたままでしたが、なんのことはない、標準入力、標準出力、標準エラース…

LD_PRELOADで共有ライブラリを差し換える

BINARY HACKS p225やっぱり写経。 taka@ubuntu:~$ more gethostname.c #include #include int gethostname(char *name, size_t len) { char *p = getenv("FAKE_HOSTNAME"); if(p == NULL) { p = "localhost"; } strncpy(name, p, len - 1); name[len - 1] = …

CからC++の関数を呼び出す

BINARY HACKS p65今度は逆。 書籍中では、いきなりboostとか出てきてしまってツライので、さっきの例の逆をやってみる。 taka@ubuntu:~$ more dbg2.cpp // // dbg2.cpp // #include extern "C" { void dbg(const char *s) { std::cout ubuntu:~$ more sample…

C++からCの関数を呼び出す

BINARY HACKS p62とりあえずそのまま写経。 taka@ubuntu:~$ more dbg.c // // dbg.c // #include void dbg(const char *s) { printf("Log: %s\n", s); } taka@ubuntu:~$ more sample.cpp // // sample.cpp // extern "C" void dbg(const char *s); int main(…

静的ライブラリと共有ライブラリ

BINARY HACKS p30BINARY HACKSアウトプットモードに入りますが、難しいので、多分かなりの部分読み飛ばすと思います。。まずは静的ライブラリ。 taka@ubuntu:~$ more add.h int add(int a, int b); taka@ubuntu:~$ more add.c int add(int a, int b) { retur…