初歩的な内容化もしれませんがわからないので教えてください。
void function(void); void main(void){ void (*p)() = function; } void function(void){}
適当にコードを書きます。(ライブラリは一切使いません。)
static変数とか使っていないのでこれらすべての要素は.textセクションと呼ばれている領域に格納されるはず。
まずはオブジェクトファイルを生成してみます。
gcc -c -O0 -m32 project1.c
objdump -h project1.o
project1.o: file format pe-i386 Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000018 00000000 00000000 000000dc 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000000 00000000 00000000 00000000 2**2 ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000000 2**2 ALLOC 3 .rdata$zzz 0000002c 00000000 00000000 000000f4 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .eh_frame 00000058 00000000 00000000 00000120 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
.textセクションのサイズは18バイト
最初に書いたソースコードをそのまんまバイナリに直すと18バイトになるってことですね。
次はコンパイル&リンクをします。
gcc -O0 -m32 project1.c
a.exe: file format pei-i386 Sections: Idx Name Size VMA LMA File off Algn 0 .text 00002f14 00401000 00401000 00000400 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA 1 .data 00000018 00404000 00404000 00003400 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .rdata 00000728 00405000 00405000 00003600 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .eh_frame 00000b0c 00406000 00406000 00003e00 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .bss 00000074 00407000 00407000 00000000 2**2 ALLOC 5 .idata 000005d4 00408000 00408000 00004a00 2**2 CONTENTS, ALLOC, LOAD, DATA 6 .CRT 00000018 00409000 00409000 00005000 2**2 CONTENTS, ALLOC, LOAD, DATA 7 .tls 00000020 0040a000 0040a000 00005200 2**2 CONTENTS, ALLOC, LOAD, DATA 8 .debug_aranges 00000038 0040b000 0040b000 00005400 2**3 CONTENTS, READONLY, DEBUGGING 9 .debug_info 00001ecc 0040c000 0040c000 00005600 2**0 CONTENTS, READONLY, DEBUGGING 10 .debug_abbrev 00000149 0040e000 0040e000 00007600 2**0 CONTENTS, READONLY, DEBUGGING 11 .debug_line 000001c4 0040f000 0040f000 00007800 2**0 CONTENTS, READONLY, DEBUGGING 12 .debug_frame 00000038 00410000 00410000 00007a00 2**2 CONTENTS, READONLY, DEBUGGING 13 .debug_str 00000086 00411000 00411000 00007c00 2**0 CONTENTS, READONLY, DEBUGGING
.textセクションのサイズが00002f14まで増えました。
なぜ増えたのですか?
.textセクションには上記のソースコードをバイナリに直したデータ以外に何が入っているのでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/26 10:08