社長:できたみたいですね。
開発:整理します。やりたいことはアプリが参照するOS機能に変更を加えること。手段は動的ライブラリのすり替え。アプリの実例は date コマンド。変更するのは現在時刻の取得関数。
開発:strace date により、date コマンドが現在時刻を取得するのに使用している関数は clock_gettime と見られます。
![](https://its-more.jp/ja_jp/wp-content/uploads/2020/07/Screen-Shot-2020-07-11-at-11.16.42.png)
開発:そこで、これを以下のように置き換えてみることとします。つまり、1970年1月1日0時22分33秒に固定します。
![](https://its-more.jp/ja_jp/wp-content/uploads/2020/07/Screen-Shot-2020-07-11-at-11.18.10.png)
開発:これをshared libraryにします。
![](https://its-more.jp/ja_jp/wp-content/uploads/2020/07/Screen-Shot-2020-07-11-at-11.25.54.png)
開発:で、これを date コマンドが使うように仕向けます。
![](https://its-more.jp/ja_jp/wp-content/uploads/2020/07/Screen-Shot-2020-07-11-at-11.33.16.png)
開発:そして実行。
![](https://its-more.jp/ja_jp/wp-content/uploads/2020/07/Screen-Shot-2020-07-11-at-11.34.30.png)
基盤:やった!
社長:感動しました。
開発:ブレークスルーはこの「LD_PRELOAD」という指定で、実行開始後最初にユーザの指定した動的ライブラリをロードするというものです。「ユーザやアプリごとに固有の動的ライブラリを設定できると良いのに」と思っていたのですが、まさにそれに相当するものでした。
社長:うーむ、これを使えば、どんな関数でもラッピングできちゃうわけですね… しかも想定外にお手軽。
基盤:自分のOSにごっそり入れ替えてしまったりとか、ネットワークOSにしちゃうとか。
開発:4月に作った ITSTPプロトコルに載せて飛ばすことも出来ます。
開発:あとは、これがLinux上のどこまでのプログラムに通用するか、さらにLinux以外では同じことができるか、です。
社長:プログラム起動時に、その時々に最適な動的ライブラリを生成して使うとかもできそうですね。
開発:まさに動的ですね。
基盤:コンテツのキャッシュとかではカバーできない部分の最適化ができそうです。
社長:いやめでたい。one giant leap for us です。めでたいので飲みに行きましょう。
-- 2020-0711 SatoxITS