2013-12-01から1ヶ月間の記事一覧

リンカによるシンボル解決(4)文字列リテラル

文字列リテラルのシンボル解決について見ていきます。 1 #include <stdio.h> 2 3 const char *dummy_string; 4 const char *string; 5 6 int main() 7 { 8 dummy_string = "123456"; 9 string = "ABCDEF"; 10 11 printf("string = %p\n", string); 12 13 return 0; 14</stdio.h>…

リンカによるシンボル解決(3)ファイル内関数のCALL

今回は、関数の呼び出し部分の実行コードについて、リンク前とリンク後で比較してみます。 d: e8 f3 ff ff ff call 5 80483c1: e8 f3 ff ff ff call 80483b9 ありゃ、該当のコード「e8 f3 ff ff ff」には、まったく変化なしですね。局所変数の場合、オブジェ…

リンカによるシンボル解決(2)ファイル内変数のシンボル解決(後編)

変数の論理アドレスが実行コード中に埋め込まれる場所は、以下の.rel.text(再配置テーブル)で管理されます。 Relocation section '.rel.text' at offset 0x410 contains 2 entries: Offset Info Type Sym.Value Sym. Name 00000005 00000401 R_386_32 0000…

リンカによるシンボル解決(1)ファイル内変数のシンボル解決(前編)

以下は、あるオブジェクトファイルの機械語コードのダンプです。 $ gcc -c sample.c -Wall $ objdump -d sample.o -M intel (略) 00000000 <main>: 0: 55 push ebp 1: 89 e5 mov ebp,esp 3: 8b 15 04 00 00 00 mov edx,DWORD PTR ds:0x4 9: a1 08 00 00 00 mov e</main>…

自己参照構造体のエイリアス定義

自己参照構造体のエイリアスを定義するとき、構造体のタグ名とエイリアスを重複させないように、エイリアスの先頭に「_」(アンダースコア)をつけたものをタグ名とする定義を見かけますが・・・ /* ×悪い例 */ typedef struct _NODE{ int node_id; struct _…

ulimit(1)

システムリソースの上限を設定する。すべての情報を表示する。 $ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7826 max locked memo…