サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
th0x4c.github.io
目的 仮想メモリ空間のアドレス等のメモリマップを調べる。 なお、ちゃんと調べたわけではないので誤りがあるかもしれない。 環境 OS: Oracle Enterprise Linux 5.8 Kernel: 2.6.32-300.10.1.el5uek x86_64 Unix/Linux における仮想メモリ空間のメモリマップは一般には以下のようになっている。 +------------------------------+ 0x0000000000000000 : : +------------------------------+ | | | text | 機械命令 | | +------------------------------+ | | | data | 初期化された static 変数 | | +------------------------------+ | | | BSS
#include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); request にアタッチしたプロセスに何を行うかを指定する。 例えば、以下が指定できる。(参考: man ptrace) PTRACE_ATTACH pid で指定したプロセスにアタッチする。アタッチしたプロセスは子プロセスとしてトレースできるようにする。(引数 addr と data は無視される。) PTRACE_PEEKTEXT, PTRACE_PEEKDATA メモリの addr の位置を参照する。(引数 data は無視される。) PTRACE_PEEKUSR USER 領域のオフセット addr の位置を参照する。(引数 data は無視される。) PTRACE_POKET
目的 Linux x86-64 の呼出規約(calling convention)を gdb で確認する。 環境 OS: CentOS 5.5 Kernel: 2.6.18-194.el5 x86_64 GCC: gcc 4.1.2 20080704 GDB: GNU gdb 7.0.1-23.el5 プログラムで関数を呼び出す際に、レジスタやスタックを使いどのように引数を渡すか、戻り値をどのように受け取るかは呼出規約(calling convention)で決められている。 Linux x86-64 では、以下のような呼出規約になっている。 (Wikepedia x86 calling conventions, 呼出規約 から抜粋) The calling convention of the System V AMD64 ABI is followed on Solaris, GNU/L
環境変数 LD_PRELOAD に共有ライブラリを指定すると、そのライブラリがすべてのライブラリに先立ってロードされる。 これを利用して通常ロードしている共有ライブラリ内の関数を置き換えることができる。(参考: man ld.so) dlsym(3) は、シンボル名の文字列を引数に取り、そのシンボルのアドレスを返す。 これを利用して、関数のアドレスを得ることができる。(参考: man dlsym) GCC 拡張 __attribute__((constructor)), __attribute__((deconstructor)) GCC 拡張で __attribute__ キーワードと共に関数の属性(attribute)を指定することができる。(参考: info gcc –> “C Extensions” –> “Function Attributes”) constructor 属性が
目的 メモリリークの調査方法をまとめる。 環境 OS: CentOS 5.5 Kernel: 2.6.18-194.el5 x86_64 GCC: gcc 4.1.2 20080704 GDB: GNU gdb 7.0.1-23.el5 Valgrind: valgrind-3.5.0 サンプルプログラム メモリリークが起きるサンプルとして以下を利用する。 leak_func() が実行される度に 2048 bytes メモリリークする。 合計で 101 回 leak_func() が実行されるので 206848bytes(= 2048 * 101 bytes) リークする。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
目的 OS コマンドによるボトルネック調査方法をまとめる。 CPU メモリ I/O ネットワーク 環境 OS: CentOS 5.5 Kernel: 2.6.18-194.el5 x86_64 CPU サーバ全体の CPU 使用率 CPU 使用率を確認する。使用率が 100% に近くなっている(= idle が 0% に近くなっている)とボトルネック。 top top では複数の論理 CPU がある場合もサーバ全体として 1 つに集約されて出力される。 $ top top - 07:23:36 up 45 days, 17:41, 2 users, load average: 7.22, 9.43, 8.03 Tasks: 223 total, 1 running, 222 sleeping, 0 stopped, 0 zombie Cpu(s): 7.1%us, 8.0%sy, 0.0%
OS: Oracle Enterprise Linux 5.8 GDB: GNU gdb 7.0.1-42.el5 解析に必要なファイル 別環境で発生した core ファイルを解析するためには以下のファイルが必要。 core ファイル 実行ファイル 共有ライブラリ 例えば、以下のように abort() でわざと core を吐かせて試してみる。 $ cat hello.c #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("hello, world\n"); abort(); return 0; } $ gcc -o hello hello.c $ ./hello hello, world Aborted (core dumped) $ ls -ltr | tail -1 -rw
このページを最初にブックマークしてみませんか?
『th0x4c.github.io』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く