読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

アセンブラ

int main(void)だけどコマンドライン引數餘裕でした

C言語のmain函數は特殊です。引數を取らないパターン(int main(void))、コマンドライン引數を取るパターン(int main(int argc, char **argv)等)を書くことが出來ます。 今回はint main(void)のパターンでもmainを呼ぶ側はきつとコマンドライン引數をレジスタ…

インライン

卒論がそろそろ危うい季節になってきましたが冷静にインライン展開することで凌いでいきましょうということでC++のインライン展開の話です。 取り敢えずこういうコードがあったとすると #include <cstdio> template <typename T> void foo(T t, const char *str) { t(str); } str</typename></cstdio>…

アセンブリでマクロ

H8の割り込みハンドラ、こいつはアセンブリで書いているわけですがハンドラの数だけ似たようなコピペをするのが気持ち悪いんでどうにかなんないのと思い最初Cプリプロセッサで足掻いてみたのですがどうも上手くいきませんでした。 調べてみたらgnu asにはマ…

函数なしで1~100までの合計を表示

変数なしでってのがあったのでそれなら函数なしっていうのがあってもいいじゃないという話です。 const char *result = "5050\n"; int __attribute__((section(".plt"))) main[] = { 0xC7489090, 0x000001C0, 0xC7C74800, 0x00000001, 0x25348B48, reinterpr…

函数ポインタを渡すコールバックにメンバ函数を渡す【黒魔術編】

函数ポインタを渡すコールバック的なサムシングにメンバ函数を渡すというよくあるネタです。例によって適当な領域を確保してそこにメンバ函数を呼ぶマシン語を書き込んでしまおうというあれです。 今回の環境は64bitはLinuxのGCCで試しているので他の環境で…

実行時The World!

今日はサンクと継続の勉強会に言ってきたわけですが、そこで実行時にマシンコードを生成して呼び出すという話が出てきたので昔ちょっとやって諦めた実行時に"The World!"と表示するプログラムを生成して呼び出すに再チャレンジしてみました。 というのも昔は…

traitsな加算を実装しようと思ったときの話

とある構造体、 struct hoge { int x, y; }; があったときに、普通にaddを実装すると、 void add(hoge &lhs, const hoge &rhs) { lhs.x += rhs.x; lhs.y += rhs.y; } って感じになるかと思います。で、今流行りのtraitsチックに書くと、 template <typename T> struct tr</typename>…

PE勉強会(4)に参加してきた

前から行こうと思って行けてなかったPE勉強会に遂に参加してきました。初参加でセッションなし且つみんなで開発や質問をする形式に耐えるのかという疑念はありましたがそれなりになんとかなったようです。 VB.NETとか知らないので冷静に勝手にC++0xで遊んで…

最適化かかるらしい

自作ライブラリの実装の話です。 template <typename Drawable> class draw : private boost::noncopyable { public: draw(const device_handle &device, const Drawable &drawable) : device_(device), drawable_(drawable) { common_draw(); } private: void common_draw() co</typename>…

コンパイラ対人間パート弐

もう一つ忘れ去られた予約語がありました。 registerは忘れられた子 今時のコンパイラはregisterを無視するどころか最適化を阻害するという噂が流れていますが、一昨日のノリで調べてみました。 以下比較ソース // registerあり #include <stdio.h> int main() { for </stdio.h>…

コンパイラVS人間

普通にネタがあったのを思い出しました。 inlineは忘れられた子 今時のコンパイラはinlineを無視するという噂が流れていますが、せっかくアセンブラを勉強したことですし、調べてみようじゃありませんか。 先ずは恒例のinlineの仕様 宣言はこうですね。関数…

まあポインタってそういうものだよね

私のポインタに対する認識はまだまだ甘かったようです。まあでもポインタが何なのかを突き詰めて考えればそういうことも出来るよな〜って感じですね。今日はC++でポインタを使った黒魔術を紹介しましょう。 ポインタの再確認 まずはポインタがどういうものか…

ページビュー10000越え記念

中何回が自分でまわしたものなのか気になるところです。 ページビュー10000越え特別企画「自分で作った多重起動を自分で潰す」 何という不毛な特集。私が解析にハマっているせいです。何をやるかはタイトルの通りです。自分で多重起動防止のプログラムを書い…