実行ファイルの情報を表示させる
readelfは、1つ以上のELFフォーマット・オブジェクト・ファイルに関する情報を表示する。ファイルに関する情報を表示します。 オプションは、表示する特定の情報を制御する。
root@*****************# readelf -h pause
ELF ヘッダ:
...
エントリポイントアドレス: 0x401050
...
実行ファイルのセクションヘッダー情報を表示させる
-S
Displays the infomation contained in the file's section headers, if it has any.
出典
man readelf
和訳
ファイルのセクションヘッダに情報があれば、それを表示する。
出典
deepl
root@********# readelf -S pause
There are 31 section headers, starting at offset 0x3938:
セクションヘッダ:
[番] 名前 タイプ アドレス オフセット
サイズ EntSize フラグ Link 情報 整列
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
....
[15] .text PROGBITS 0000000000401050 00001050
0000000000000175 0000000000000000 AX 0 0 16
....
[25] .data PROGBITS 0000000000404020 00003020
0000000000000010 0000000000000000 WA 0 0 8
....
気づき
エントリポイントの0000000000401050
が書いてある
データのメモリマップ開始アドレス0000000000404020
がある
プロセスのメモリマップを表示させる
proc/<pid>/maps
というファイルによって得られる
出典
「/proc」ディレクトリにあるファイルは、システムをコントロールするために使われます。そのため、システムのさまざまな情報がここに格納されており、/procにあるファイルを参照することによって、システムの情報をリアルタイムで得る
ことができます。
出典
root@***************# ./pause &
[1] 3842
root@***************# cat /proc/3842/maps
00400000-00401000 r--p 00000000 08:05 262192 *********************************
00401000-00402000 r-xp 00001000 08:05 262192 *********************************
00402000-00403000 r--p 00002000 08:05 262192 *********************************
00403000-00404000 r--p 00002000 08:05 262192 *********************************
00404000-00405000 rw-p 00003000 08:05 262192 *********************************
....
気づき
00401000-00402000 r-xp 00001000 08:05 262192
メモリマップ範囲にコード領域が収まる
気づき
今更だがコード領域、データ領域ってなんだろう?
参考書を読み返す。
execve()関数の実現のために、実行ファイルは、プログラムのコードやデータに加えて、次のようなプログラムの起動に必要なデータを保持しています。
出典
つまり
プログラムのコード読み出して上書きするデータが必要だからコード領域とデータ領域が必要なのか。
コード領域、データ領域をどう見分けるのか?
セクション名: readelfの1行目第二フィールド(Name)
出典
Cソースプログラムに書かれた関数や変数・定数をROMとRAMに配置するために、Cコンパイラは複数のセクションというかたまりの中に、関数、const変数、初期化変数、非初期化変数を集め
、アセンブリソースを作り出します。上図のRAM・ROMの箱をセクションに見立てて頂くと良いのですが、実際にはもっと細かいセクション分割を行っています。
出典
気づき
多分textはソースコード、dataは上書きするデータとして分けられるのだろう。
メモリマップとは
プログラムは、これらのメモリ状況(メモリマップ)
に合わせて配置しなければなりません。メモリマップはマイコンのハードウェアマニュアル等に記載されています。たとえば、こんな感じの図です
出典
感想
入る知識が多くて何を書いてるかわからなくなった。
ご容赦ください。