プログラミング

プログラミング

ARMのプログラムを作成してデバッグする 第1回+

前回の仮想ターゲット作成で1つ問題になった点がありました。それがネットワークです。 一応ifconfigではIPも付与されているし通信できそうに感じましたが、ホストとゲストでpingが通りませんでした。 ついでに複数ゲストを用意してみましたが、これもダメでした。 調べて色々と実験した結果、次のことがわかりました。 「そもそも QEMU のユーザーモードネット...
プログラミング

ARMのプログラムを作成してデバッグする 第1回

手軽にやるためにWindowsの環境でなんとかやってみたいと思います。 ターゲット環境はQEMUを用いて ARM Linux を動かすことで対処したいと思います。 開発環境は出来ればWindowsでやりたいですが、Linuxのほうが楽らしいのでまずはUbuntuでARM用のクロスコンパイルを実現させます. 使用している環境は、Windows 7Pro SP1...
DirectX

XInputの注意事項

最近になってゲームパッドのコーナーを見てみると、純正XBOX 360パッド以外でもたくさんの XINPUTの対応パッドが並んでいることに気付きました。これはXINPUT無視できないなーと感じました。また多くのパッドが DirectInput との切り替えスイッチを持っていて、両対応できるようになっていました。  これはアプリケーション側も両対応しておいたほう...
データ解析

Mach-Oのオブジェクトファイルの関数を呼び出す

いわゆるBinary Hacksにあった、「オブジェクトファイルを自力でロードする」のMach-O版をやってみました。MacではオブジェクトファイルもまたMach-O形式で出力されています。 今までの記事の内容で多くのことがわかってきました。特に関数フックが実現出来るようになった今、形式が同じであるオブジェクトファイルのロード&実行はそんなに難易度の高いもの...
データ解析

Mach-Oでの関数フック

ようやくここまでたどり着きました。以前 elfバイナリでやったことのMach-O版です。 実行体は外部.soの何かの関数を呼び出しているとして、その関数への参照をフックしたいという要求に応えてみたいと思います。 フックした後の関数は実行体内部に存在するとします。 これらの関係を図示すると以下のようになります(図は以前の使い回しです…)。 今までに調査してわか...
データ解析

Mach-O編 Import関数の列挙

前回の最後で dysymの undef extsymbolのほうがImport関数の情報として正しそうと感じていましたが、どうやらそれは間違っていたようです。正しくはIndirectテーブルから求めていくのが正解のようです。 このIndirectテーブルは struct dysymtab_command の indirectsymoff で示される場所に配置...
データ解析

セグメント&セクションの補足と外部関数への依存について

mach-o編もずいぶんと進んできたので、PEの時にやったように依存するライブラリ情報だけでなく、関数名を表示したいを思って色々を調べてみました。その結果、条件限定かもしれませんがうまく表示できるようになりました。今回はその内容をメモとして公開しようと思います。正しい方法とか指摘してくれると幸いです。 セクションについて 今までのセクション情報で表示できてい...
データ解析

mach-oの外部関数解決の仕組みを追う(__stubs, __nl_symbol_ptr, __la_symbol_ptrセクション)

C/C++ミックスの実行体を使うようにしたら、実は __la_symbol_ptr セクションは存在しつつ、 __got セクションが出現しました。__la_symbol_ptrセクションが示す先が PLT.GOT相当の領域っぽいなぁと思っていただけに、そのものズバリなセクションが出現して驚きでした。この__gotセクションも他の同種セクションのように扱うだ...
データ解析

Mach-OのFatバイナリ(Universal Binary) について

Universal Binaryというものがあります。これは1つのバイナリの中に2つ以上の実行体が格納されたものです。32bit版と64bit版のバイナリを1つのファイルで配布することも出来るようになるので便利なシロモノです。Windowsもこういったものを採用してほしかったと思います。 この形式の場合次のようなヘッダがファイル先頭に付きます。 struct...
DirectX

DirectX11で複数ウィンドウを使ってみる

最近Mach-Oの調査ばっかりやっているので、DirectX11とか触ってるとほっとします。 昨今では2つのディスプレイが繋がっていることも珍しくないと思います。 それぞれに対してDirectXアプリケーションのフルスクリーンやりたいとか、独立した複数ウィンドウでDirectXの描画やりたいとかそういうときにどうしたらよいかを実験してみました。 結論から言え...