linkerELFにおいて、共有libraryのlinkはOSでなくheader内で指定されてlinkerが行う。このlinkerを指定する文字列を書き換え、その挙動を確認した。headerのtypeとして、PT_INTERPがある。これは単一のbinary中に高々$1$つまで存在し、そのsegment内の文字列としてinterpreterを指定する。interpreterが指定されているとき、本体がloadされるより先にそのinterpreterがloadされる。用途としては共有libraryの準備であり、その場合interpreterが本体プログラムをloadする。sectionを唯一のsegmentとして含む(ただしsection名は必ずしも.interpである必要はない)。準備として、普通のプログラムを用意する。sectionが存在する。今回、pathは/lib64/ld-linux-x86-64.so.2であった。上書きinterpreterとして指定するプログラムの処理内容は(指定するだけなら)なんでもよい。この例ではinterruptedと表示して終了するプログラムを使用する。world!の代わりにこれが表示されれば成功である。1;}ただし再帰的にinterpreterを要求するのは許されないようで、静的linkする必要がある。interp適当に.interpを編集する。null終端の文字列が認識されるので、後ろにゴミを残してもよい。world!でなくinterruptedと表示される。これは期待される挙動である。引数とかもちゃんと渡ってきてたりする。NULLでも仕事をするのでこれを読んでいるのではない。