プログラミング

サーバー構築

QNAPファイルサーバー(NAS)で、Gitを使いたい

QNAPのファイルサーバー(NAS)にSubversionは以前いれてみたので、Gitも同様にできないかと考えていました。できればGitLabとか入れてみたいなと思っていたのですが手持ちの TS-439では厳しいようだったので、他の物を探してみました。 その結果、warファイル1つで簡単にGitリポジトリのホスティングをできるGitBucketがあったので、...
プログラミング

elfバイナリでの関数フック. 強引編

今までのものは手間はかかっているもののきちんと手順を踏んで、わりと行儀よく(?)関数のフックを実現していました。今回は豪快な関数フックの方法を試してみたいと思います。 ※ なおこの手順で問題が起こっても自己責任でお願いします。前提条件として 32bitのアプリケーションとしています。 その方法とは、対象関数の先頭に、自分のフック関数へのジャンプを埋め込んでし...
プログラミング

セクションヘッダがない場合の関数フック(elf編)

前回は共有ライブラリ(.so)での関数フックの話でした。そしてこれはセクションヘッダがある前提で rel.plt セクションを見つけました。今回はセクションヘッダを参照しないでPLTの場所を特定し、関数フックを実現する案を記載してみようと思います。 そもそも elf実行体がメモリにロードされて実行されている状況では、elf実行体そのものにセクションヘッダがあ...
C++/CLI

C++/CLIで妙なリンクエラー(LNK2034)

VisualStudio 2012の環境で、C++/CLI でのDLLを作成していたところ、妙なリンクエラーに出逢いました。このDLLは他のC/C++のライブラリをリンクして、C#から扱うためのラッパーとして機能するものです。以前は VisualStudio 2008 の環境でコンパイルさせていました。
プログラミング

共有ライブラリ(.so) の関数呼び先をフック

前回の内容でとりあえずシンボル情報にアクセスする糸口がわかりました。 これを利用して、共有ライブラリの関数フックを考えてみたいと思います。 sample.app が共有ライブラリ libfunc.so と libbar.so を利用しているとします。そしてこれらが下記の図に示すような呼び出し関係を持っているとします。 しかし、このlibbar.so の関数に...
プログラミング

Elfフォーマットのシンボル情報を取得したい

gnuのツールでは、objdump や readelf, nm といったツールで実行体の情報を出力することができます。これはElfバイナリにセクションやシンボルの情報がどのように格納されているかがセクションヘッダとして格納されているために表示できます。 そのため、stripコマンドでセクションヘッダを削除してしまうと、これらの情報が表示されなくなってしまいま...
プログラミング

gccによるC/C++ランタイムのスタティックリンク

前回興味を持った内容の続きです。CランタイムやC++ランタイムをgccを使える環境でスタティックリンクで実行バイナリにリンクしてしまう!という話になります。 32bit,64bitビルドの区別 gccでコンパイルする際には、-m32, -m64 のオプションで生成するElfバイナリの形式を決めるようです。それぞれが32bit(x86)用コード生成、64bit...
プログラミング

gccによるCランタイムのリンク方法

VisualStudioでは、コンパイル&リンクしたコード(ビルドしたコード)をC/C++のランタイムをスタティックリンクするかダイナミックリンクするかの指定が、コード生成の部分でできる。exeを持ってきてそのまま動く、ということをさせるにはスタティックリンクで作成し、配布した方が楽です。 同じことが gcc (linux)の世界ではどうなのだろうと調査して...
Android

Android 4.3 に更新したら ndk-gdb できなくなった!?

SIMフリー版(国際版) Galaxy S4 において、 Android 4.3 を入れたものを借りた時のお話です。タイトルにあるとおり、「ネイティブデバッグ(ndk-gdb)が使用不可能」という状態でした。これについて色々と調べて、とりあえずは納得のいく結論(?)までたどり着きました。
Android

最近のAndroid開発環境(NDK r9b)の構築

最近NDKのほうも更新が進んで r9b が出ているようです。 以前の状況と結構変わっているようなので再度セットアップしてみました。 googleからダウンロードしたら、前回ADT bundleのeclipseの場所に展開します。 sdkフォルダがあるところに、android-ndk-r9b として展開します。 そして、環境変数 NDKROOT を作成し、この...