2018-01-01から1年間の記事一覧

Goのオブジェクトファイルの中身を見てみる(リロケーション編)

Go

前回のシンボル編に引き続き、Goのオブジェクトファイルについてのメモ。今回はリロケーションについて。前回と同じく、Linux環境、Go 1.10が前提。CPUアーキテクチャはx86_64。 リロケーション情報のフォーマット Goのオブジェクトファイルの場合、リロケー…

Goのオブジェクトファイルの中身を見てみる(シンボル編)

Go

Goのオブジェクトファイルについて調べる機会があったのでメモ。今回は主に定義済みシンボルについて。Linux環境、Go 1.10が前提。 オブジェクトファイルのフォーマット Goのオブジェクトファイルは独自フォーマットになっている。Linux環境でよく使われるEL…

C言語でclosureを実現する

C言語は、仕様上closureをサポートしていない。GCC拡張によるサポートはあるけど、clangではエラーになる。ただライブラリレベルでclosureの機能を実現することはできるようで、libffcallというライブラリがその機能を提供している。この記事では、libffcall…

システムコールにみるGo言語のnetパッケージの実装

netパッケージのコードを読む機会があったのでメモ。TCPのエコーサーバーを実行して、呼ばれているシステムコールとその引数を確認した。Go言語がシンプルなインターフェースを提供している裏側で、ノンブロッキングIOやIO多重化を駆使している様子がわかっ…

Goでpingコマンドを書いてみた

Go

最近読んだUNIX Network Programmingに触発されてpingコマンドを書いてみた。 ping command in golang, just for fun 本家pingと違って、統計情報とかは保存していない。MessageのPack/Unpack周りの実装はnet/dnsmsg.goをかなり参考にしている。 Linux環境で…