ん日記すらりん日記ホーム人気記事イベントProductsMach-Oでの関数フックデータ解析2014.06.22ようやくここまでたどり着きました。elfバイナリでやったことのMach-O版です。実行体は外部.soの何かの関数を呼び出しているとして、その関数への参照をフックしたいという要求に応えてみたいと思います。フックした後の関数は実行体内部に存在するとします。これらの関係を図示すると以下のようになります(図は以前の使い回しです...)。今までに調査してわかっている内容を利用するとこれが実現出来ます。前提条件にあるように外部の共有ライブラリを利用する場合、インポート関数テーブルが生成されます。このテーブルが参照するデータの中に関数の実体が格納される部分がありました。このあたりの調査過程はこちらの記事を参考にしてみてください。la_symbol_ptrセクションの該当する部分を求めて、置き換えたい関数のアドレスに更新するだけで処理は完了です。__IMPORTというセクションも存在するらしいのですが、手元ではこれらの実行体を作ることが出来ず未確認です。動的シンボルテーブルの情報を取得するセクションの情報を処理して、la_symbol_ptrのセクション情報を取得するフック仕込み関数名から関数のアドレスが書かれている場所を求めるまでは以下のようになります。シンボルテーブルの中身(nlist構造体の配列)の中から関数名情報を求める。関数名がフックを仕込みたい関数名かどうかをチェック。上記で求まった序数で、インポートテーブルの場所を特定し、その中に新しい関数のアドレスを書き込んでおく。ここでのポイントは序数はあくまでインポートテーブルでの序数とするため、reserved1で示される開始インデックス値を引いて求める必要があります。インダイレクトテーブルに関しては以前の記事にて走査の方法が使えるのでここでは割愛します。(ARM/Barematal)毎回同じような時期にクロスコンパイラの作成をやっている気がします。ベアメタル用のクロスコンパイラの作成をテーマにやっています。使用した環境やツールは以下のようになっています。...DirectXDirectX10以降のテクスチャ配列について今回気になることもあって、改めて調べてみました。複数のテクスチャを1つの変数(名)で扱えて便利だよって感じでした。ここまでくるにも色々と気をつけなくてはいけない点がありました。防備録というかメモというか記しておきたいと思います。すごく今更ですが・・・。利用している自作アプリケーションで使用したいことがあります。どんなものか調べてみました。詳しくはウィキペディアさんに譲るとして、以下のメリットがあるフォーマットだと認識しました。メモリを代用としてこちらから起動する方法にトライしてみました。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。ん日記.タイトルとURLをコピーしました。