Hacksにあった、「オブジェクトファイルを自力でロードする」のMach-O版をやってみました。MacではオブジェクトファイルもまたMach-O形式で出力されています。今までの記事の内容で多くのことがわかってきました。関数フックが実現出来るようになった今、形式が同じであるオブジェクトファイルのロード&実行はそんなに難易度の高...2014.06.28データ解析プログラミングデータ解析Mach-Oでの関数フックようやくここまでたどり着きました。elfバイナリでやったことのMach-O版です。実行体は外部.soの何かの関数を呼び出しているとして、その関数への参照をフックしたいという要求に応えてみたいと思います。フックした後の関数は実行体内部に存在するとします。これらの関係を図示すると以下のようになります(図は以前の使い回しです...)。extsymbolのほうがImport関数の情報として正しそうと感じていましたが、どうやらそれは間違っていたようです。正しくはIndirectテーブルから求めていくのが正解のようです。示される場所...2014.06.15データ解析プログラミングデータ解析セグメント&セクションの補足と外部関数への依存についてmach-o編もずいぶんと進んできたので、PEの時にやったように依存するライブラリ情報だけでなく、関数名を表示したいを思って色々を調べてみました。その結果、条件限定かもしれませんがうまく表示できるようになりました。今回はその内容をメモとして公開しようと思います。正しい方法とか指摘してくれると幸いです。セクションが出現しました。PLT.GOT相当の領域っぽいなぁと思っていただけに、そのものズバリなセクションが出現して驚きでした。Binaryというものがあります。これは1つのバイナリの中に2つ以上の実行体が格納されたものです。32bit版と64bit版のバイナリを1つのファイルで配布することも出来るようになるので便利なシロモノです。Windowsもこういったものを採用してほしかったと思います。この形式の場合次のようなヘッダがファイル先頭に付きます。セグメントとセクション補足dysymtab_commandの中身を調べていたのですが、よくわからない感じだったので後回しにすることにしました。今回はセグメントやセクションの中身の方を調べていきたいとおもいます。現在すでにわかっているセグメント&セクションの情報はこんな感じでした。実行体のロードコマンドの情報を表示してみる前回は概要とセクション情報表示程度だったので、今回はもうすこしロードコマンドの表示をすすめて見ようと思います。ロードコマンドの種別によって、そのコマンドのサイズと型が決まります。あとはこれに応じてメンバの表示を行ってみたものが下記の結果です。ロードコマンドの型の準備と表示が面倒なだけなので、プログラムコードは割愛します。Mac...2014.05.28データ解析プログラミングデータ解析Mach-O形式の調査~導入編~PEフォーマットは以前調査したので、今度はApple製品で採用されているMach-O(マークオー)形式の調査をしてみたいと思います。最小サンプルの実行体を用意して既存ツールでちょっと確認してみます。ん日記.タイトルとURLをコピーしました。