OpenGL

OpenGL 4世代での描画手順 その1

OpenGL も現在は 4.4 までバージョンが上がりました。自分が知っているのは 3.3 の頃までで、そのときですらジオメトリシェーダーを扱うプログラムに関して調べた程度でした。最近のものでは DirectX 11との対抗もあってか、ずいぶんと機能が増えて、また、描画の方法も従来とは変わってきたので、改めて勉強をしてみます。
プログラミング

Windowsファイル共有でのGitリポジトリ運用

前回 QNAP のファイルサーバーで Git リポジトリを扱おうとして、思うようにいかなかったので他の方法を探してみました。 ちなみに、あれから git daemon による git リポジトリを扱う方法もやってみたのですが、Windowsのmsysgitのgitからは、Write Objects の状態から進まずという(フリーズ?)という状態で停止でした。...
サーバー構築

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)の世界ではどうなのだろうと調査して...