FreeBSD初心者運用日記 このページをアンテナに追加

2008-05-27

[][]アーカイブファイルに含まれてる関数を調べる 07:56 アーカイブファイルに含まれてる関数を調べる - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - アーカイブファイルに含まれてる関数を調べる - FreeBSD初心者運用日記 アーカイブファイルに含まれてる関数を調べる - FreeBSD初心者運用日記 のブックマークコメント

$ nm -g /usr/lib/libc.a | grep -v "U" | grep -v "D" | grep -v "C" | grep -v "W" | grep -v "w" | grep -v "R" | grep -v "B" | grep -v "V"       

[]オブジェクトファイルについて 08:15 オブジェクトファイルについて - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - オブジェクトファイルについて - FreeBSD初心者運用日記 オブジェクトファイルについて - FreeBSD初心者運用日記 のブックマークコメント

  • オブジェクトファイルは以下の3つから構成される
    • テキストセグメント(プログラムの命令部分)
    • データセグメント(初期化されたデータ(外部変数、スタティック変数)が配置)
    • BSSセグメント(初期化されていないデータ(外部変数、スタティック変数)が配置)

ちなみに、自動変数はスタックセグメントやレジスタというところに格納される。

2008-05-25

[][]usageの表示方法 00:02 usageの表示方法 - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - usageの表示方法 - FreeBSD初心者運用日記 usageの表示方法 - FreeBSD初心者運用日記 のブックマークコメント

$ strings /bin/ls | grep -i usage

[][]アーカイブファイルに含まれるオブジェクトファイルをリストする方法 00:15 アーカイブファイルに含まれるオブジェクトファイルをリストする方法 - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - アーカイブファイルに含まれるオブジェクトファイルをリストする方法 - FreeBSD初心者運用日記 アーカイブファイルに含まれるオブジェクトファイルをリストする方法 - FreeBSD初心者運用日記 のブックマークコメント

$ ar t /usr/lib/libc.a | head
wmemset.o
wmemmove.o
wmemcpy.o
wmemcmp.o
wcsxfrm.o
wcswidth.o
wcstok.o
wcsstr.o
wcsspn.o
wcsrchr.o

2007-11-03

[]Binary Hacks読書 05:29 Binary Hacks読書 - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - Binary Hacks読書 - FreeBSD初心者運用日記 Binary Hacks読書 - FreeBSD初心者運用日記 のブックマークコメント

ライブラリ作成

$ cat hoge.c
#include <stdio.h>
int hoge() {
        printf("hello\n");
}
$ cat foo.c
#include <stdio.h>
int foo() {
        printf("hello\n");
}
$ cc -c -o hoge.o hoge.c
$ cc -c -o foo.o foo.c
$ ar ruv libhogefoo.a hoge.o foo.o
$ ar tv libhogefoo.a 
rw-r--r-- 1001/0    768 Nov  4 05:25 2007 hoge.o
rw-r--r-- 1001/0    768 Nov  4 05:25 2007 foo.o

nmコマンド実行

$ nm hoge.o
00000000 T hoge
         U printf
white.localhost:~$ nm .o
white.localhost:~$ nm libhogefoo.a 

hoge.o:
00000000 T hoge
         U printf

foo.o:
00000000 T foo
         U printf

U は未定義な関数名 (外部参照の関数ってこと )

T がその場所で定義されている関数名を表す。

odコマンドは、ファイルのダンプを行う。oはオクテットの略だけど、10進数や16進数にも対応してたりする。

[]gdb 22:09 gdb - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - gdb - FreeBSD初心者運用日記 gdb - FreeBSD初心者運用日記 のブックマークコメント

以下のコマンドでコアの場所を確認

$ sysctl -a | grep kern.corefile

kern.corefile: %N.core

※ %Nはman coreで見ると、プロセス名のことらしい。

以下のコマンドでgdbモードに。

$ gdb {実行ファイル} {コアファイル}