ホットパッチ済みの関数にさらにホットパッチを当てるとどうなる?
If somebody tries to hot-patch an already-hot-patched function
If somebody tries to hot-patch an already-hot-patched function
ホットパッチ済みの関数に対して、さらに別のホットパッチを適用しようとした場合、具体的にどのような挙動になるのか気になっています。これに関する知見や経験があれば教えてください。
Windowsの並列DLL読み込みって、特定のNT DLL関数がフックされているのを検知すると、プロセス側で防御的に無効化する仕組みになってるんだよね。 https://stackoverflow.com/questions/42789199/why-there-are-t... (https://stackoverflow.com/questions/42789199/why-there-are-three-unexpected-worker-threads-when-a-win32-console-application-s)
もっとホットパッチが普及してもいいと思う。AIがコンピュータセキュリティを根底から変えてしまった今、ソフトウェアを迅速にパッチ適用することの重要性がこれまで以上に高まってるからね。アップデートのためにプロセスやPCを再起動しなきゃいけないって、以前にも増して厄介な問題だよ。
以前の職場で、モノリシックなDockerイメージの上に個別のJavaクラスファイルをパッチ適用するDockerビルドを書いたことあるよ。実行時のパッチじゃなかったけど、たった数KBの単一レイヤーを緊急時にサッとデプロイできるのは便利だった。面白いことに、制約も似ていて、ビルド時にチェックしてたよ。パブリックなABI変更は不可で、一度に適用できるパッチは一つだけっていう制限だったな。
これって、二種類のホットソースを混ぜるようなものだよね。結果は人による(ymmv)。
関数のフックをMicrosoftが「不正」とか「許可されていない」行為とみなすのは面白い言い分だよね。Microsoft自身がDetoursライブラリを作っているのに、以前はそんな風に語ったりしなかったはずだし。あと、この説明には肝心なところが抜けてる。フックは通常、ユーザー空間からプロセスごとに適用されるもの。動的ライブラリのコードページは、パッチを当てるために書き込みを行うと共有ページからCoW(コピーオンライト)される仕組みだしね。Windows Updateも同じような仕組みなのかな? それとも元の共有ページを直接書き換えて全プロセスに影響を与えてるんだろうか。一つのプロセスでのフックが、システム全体のホットパッチを無効にしちゃうのかどうか気になるな。