Ch1.2 Programs Are Translated by Other Programs into Different Forms
1.2 Programs Are Translated by Other Programs into Different Forms
ハロープログラムは高度なCプログラムとして旅を開始します.Cプログラムは人間に読まれ理解されるからだ.しかし、
hello.c
をシステムで実行するためには、単一のC文は、他のプログラムによってlow-level machine-language
の構築に変換されなければならない.これらのコンストラクションはexecutable object program
形式でパッケージ化され、バイナリディスクファイルとして格納されます.オブジェクトプログラムはexecutable object file
と呼ばれます.UNIXシステムからソースファイルからオブジェクトファイルへの変換は
compiler driver
によって実行される.linux> gcc -o hello hello.c
ここで、GCCコンパイラドライバはhelloです.cソースファイルを読み出し、helloと呼ばれる実行可能オブジェクトファイルに変換する.この遷移は、連続する4つのステップから構成されます.この4つのステップを行うプログラム(プリプロセッサ、コンパイラ、アセンブリ、およびリンク)を合わせてcompliation system
と呼ぶ.#include <stdio.h>
コマンドは、フロントプロセッサにシステムヘッダファイルのstdio.h
の内容を読み取り、プログラムtextに挿入するように要求する.結果は異なる形式のCプログラムであり、通常は.i
接尾辞を有する.hello.i
テキストファイルをコンポーネントを含むhello.s
テキストファイルに変換する.hello.sファイルには、この定義を持つmain関数が含まれます.1 main:
2 subq $8, %rsp
3 movl $.LCO, %edi
4 call puts
5 movl $0, %eax
6 addq $8, %rsp
7 ret
2〜7各ラインは、低レベルのマシン言語構築を記述する.コンポーネントは非常に役立ちます.コンポーネントは、他のコンパイラやその他の高度な言語に共通言語を提供するためです.たとえば、Cコンパイラとポートは同じコンポーネント結果ファイルを作成します.relocatable object
の形式で結合され、結果を対象ファイルhello.o
として保存する.このファイルは、エンコードされたプライマリ関数で構築された17バイトを含むバイナリファイルです.もし私たちがhelloだったらテキストエディタを使用してoファイルを表示しようとすると、認識できない可能性があります.printf
関数を呼び出すことに注意してください.printf
関数は、事前にコンパイルされたprintf.o
オブジェクトファイルにあります.このセクションはhello.o
プログラムにマージする必要があります.リンカーはこの合併を実行した.結果はhello
ファイルで、これは実行可能オブジェクトファイルです.この実行可能オブジェクトファイルはメモリにロードされ、システムによって実行される準備ができています.Reference
この問題について(Ch1.2 Programs Are Translated by Other Programs into Different Forms), 我々は、より多くの情報をここで見つけました https://velog.io/@suseodd/Ch1.2-Programs-Are-Translated-by-Other-Programs-into-Different-Formsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol