私はJohn R. LevineのLinkers and Loadersを読んでいました。オブジェクトファイルのプロパティには、次のうちの1つ以上が含まれていることがあります。は ".o"ファイル "loadable"ですか?
- ファイルはリンク可能
- ファイルがロード可能な
- ファイルは、この例を考えると、今
実行する必要がありますする必要がありますする必要があります:
私はコンパイルしてリンクする#include<stdio.h>
int main() {
printf("testing\n");
return 0;
}
:
$ gcc -c t.c $ gcc -o t t.o
objdump
を使用してt.o
を検査しましたが、そのタイプはREL
と表示されます。 t.o
はすべてのプロパティで満足しますか?私はリンク可能で、実行不可能であると信じています。私はそれがロード可能ではないと信じていたでしょう(あなたが.oファイルから.soファイルを作成しない限り)。しかしタイプREL
は、移転することになっていることを意味し、移転は移送のコンテキストでのみ発生するため、ここでは混乱しています。 疑問の要約: -
- ".o"ファイル
loadable
はありますか? - ".o"ファイル、 ".so"ファイルに存在するセクションに関するリソースを読む - 違いなど?
プログラムブートストラップでは、libc_start_mainを参照していますか? –
@eQuiNoX__現代のリンカが実際にコードを内部で保持しているかもしれないが、私は通常、(リンクする前に) 'crt0.o'と呼ばれるファイルにあるコードを参照しています。 –
通常symbol _start –