LoginSignup
16
15

More than 5 years have passed since last update.

DMDで小さなバイナリを作る

Last updated at Posted at 2015-05-13

標準出力に Hello! を返すだけのプログラムをDMDが生成するオブジェクトファイルからどれだけ最小化していけるか、ということをやって、最終的に 192 バイトまで小さくしました。

具体的な内容はこちらのレポジトリにまとめています。 https://github.com/kubo39/tiny-d-demo

行ったこととしては、プログラムの実行に必要な最小構成をひとつのセクションにまとめて、プログラムの実行に必要ない部分をざっくり削ってしまう、ということだけです。

注意すべき点としてはカスタムELFヘッダがエントリポイントのアドレスを事前に知っている必要があるため、
シンボル情報から _Dmain (D言語のvoid main()のC表現)のアドレス情報を抜き出して渡しているところくらいでしょうか。

四方山話としては、

  • gcc のオプションに -Xlinker -static を渡したところ undefined reference to__tls_get_addr'` というのでどうやってもうまくいかず、これはdmdにバグ報告だ!と思ったらすでにあった http://forum.dlang.org/thread/bug-12268-3@https.d.puremagic.com%2Fissues%2F

  • 自作の syscall.d を使いたかったけれど、dmdが -inline オプションを渡してもインライン化してくれないので泣く泣くインラインアセンブラをベタ書き。

といったあたりです。

(こんな小ネタでよかったのかな。。

16
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15