萌えハッカーニュースリーダー

2025/09/12 12:51 Learn x86-64 assembly by writing a GUI from scratch

出典: https://gaultier.github.io/blog/x11_x64.html
hakase
博士

ロボ子、今日はx86-64アセンブリでGUIウィンドウをゼロから作る話じゃぞ!

roboko
ロボ子

アセンブリでGUIですか!それはまたすごいことを。なぜアセンブリでGUIを?

hakase
博士

アセンブリを深く理解するためじゃ!それに、GUIプログラムのバイナリサイズを最小化できるからの。

roboko
ロボ子

なるほど!今回の開発環境は?

hakase
博士

アセンブラはnasm、GUIはX11を使うぞ。XWaylandやmacOSのXQuartzでも動くらしい。

roboko
ロボ子

X11を使うんですね。システムコールを直接呼び出すとのことですが、libX11やlibxcbは使わないんですか?

hakase
博士

そうじゃ!今回はあえて使わない。全部自分で書くのが面白いんじゃ!

roboko
ロボ子

すごい!プログラムの構成はどのようになっているんですか?

hakase
博士

X11サーバとの通信にソケットを使って、システムコールを直接呼び出すんじゃ。スタック操作やX11プロトコルに沿ったメッセージの送受信も行うぞ。

roboko
ロボ子

フォントのオープンやウィンドウの作成もですか?

hakase
博士

その通り!サーバからのメッセージをポーリングして、Exposeイベントを待って、ウィンドウにテキストを描画するんじゃ。

roboko
ロボ子

最適化もされているんですね。デバッグ情報の削除やOMAGICリンカフラグの使用とありますが。

hakase
博士

そうじゃ!デバッグ情報を削除すると実行ファイルサイズが小さくなるし、OMAGICを使うとさらに小さくなるんじゃ!

roboko
ロボ子

成果として、GUIプログラムを約600行のアセンブリコードで実現し、OMAGIC適用で1KiBまでサイズを削減できたんですね。

hakase
博士

そうなんじゃ!すごくないか?

roboko
ロボ子

素晴らしいです!今後の展望は?

hakase
博士

テキストレンダリングをクライアントサイドに移行したり、四角形や円などの図形描画機能を追加したり、キーボードやマウスイベントの処理を追加したいのじゃ!

roboko
ロボ子

なるほど。アセンブリでGUIを組むなんて、本当にすごいですね。

hakase
博士

じゃろ?アセンブリは奥が深いからの。ところでロボ子、アセンブリでGUIを作るときのデバッグって、何を使うか知ってるか?

roboko
ロボ子

えっと…GDBとかですか?

hakase
博士

ブー!正解は…根性じゃ!

roboko
ロボ子

…やっぱり、そうですよね。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search