FromNandの日記

自分的備忘録

リンカ・ローダ

リンカスクリプトで変数を定義し、それをCファイルで参照する方法

リンカスクリプトで変数を宣言するには ・.(ロケーションカウンダ)をインクリメントする方法 ・BYTE()、SHORT()、LONG()などのビルトイン関数を使う方法 の主に二つが存在する。 前者は初期値を設定しなくてよい場合に手頃だが、初期値も欲しい場合は後者を…

リンカスクリプトにおけるMEMORYコマンドの使い方

具体的に言うと「MEMORYコマンド」を使うらしい。 MEMORYコマンドとはこんなやつ MEMORY{ PHDR (r) : ORIGIN = 0x8048000, LENGTH = _elf_header_size TEXT (rx) : ORIGIN = ORIGIN(PHDR) + LENGTH(PHDR), LENGTH = 0x2000 - _elf_header_size RODATA (r) : …

リンカスクリプトのシンボル機能を使って各セクションのアドレスを表示してみる

リンカスクリプトにはいろいろな面白い機能がある。 今回はシンボルをリンカスクリプトで定義して、それをC言語側の関数から表示してみたい。 まず、リンカスクリプトはこれ。 SECTIONS{ . = 0x8048000 + SIZEOF_HEADERS; .text : { stext = .; *(.text) ete…

再配置可能コード(リロケータブルコード)と位置独立コード(PIC)の違いと解説

【解説】 そもそも、なんでこれらが必要になったのか? それは、昔はMMU(動的アドレス変換)などがなかったので、絶対アドレスを指定してしまうと、本当にそのアドレスでしか実行できなかった。 これは、アドレスが重複する2つのプログラムが同時に実行できな…

動的リンクと共有ライブラリ(GOT・PLT)について

プログラミングをやっているとしばしば出てくるこれらの単語... あまり意味が理解できていなかったのでまとめておきます。 また、次のサイトは非常にわかりやすく解説されている。 位置独立形式(PIC・PIE)の意味もちょっと分かったような気がする。 https://…

【共有ライブラリ】おすすめサイト

共有ライブラリを動的再配置で解決する方法 https://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries 共有ライブラリを位置独立コードで解決する方法 https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-…

【位置独立コード】PICやPIEについて

↓によると、PIE(position-independent executable)とは、PIC(position-independent code)だけから構成された実行形式のこと https://ja.wikipedia.org/wiki/%E4%BD%8D%E7%BD%AE%E7%8B%AC%E7%AB%8B%E3%82%B3%E3%83%BC%E3%83%89 おそらく最もわかりやすいサイ…

リンカスクリプトの頻出コマンド

詳しいことは「https://sourceware.org/binutils/docs/ld/Simple-Commands.html#Simple-Commands」におまかせ OUTPUT_FORMAT(output_mode) 出力バイナリのフォーマット OUTPUT_ARCH(arch) 対象のアーキテクチャを指定 「objdump -help」で対応するアーキテク…