Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

標準出力に 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 オプションを渡してもインライン化してくれないので泣く泣くインラインアセンブラをベタ書き。

といったあたりです。

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away