タグ

C++とbinaryに関するWackyのブックマーク (54)

  • CLR Hosting : 仮想メモリ編 (1) - NyaRuRuが地球にいたころ

    地味に需要あるのかもしれないですなぁ.arton さんのところと MSDN Forums より. NET Frameworkとヒープサイズ C#アプリ実行時のヒープサイズの指定方法 Java と比べれば CLR Hosting API は How to 記事を書いて一発というわけにはいかないぐらい (MSDN に正確な仕様が書いてないぐらい) 暗部で,かつ苦労の割にうまく行くかどうか分からないという暗黒感たっぷりですが,ちょっとだけ時間がとれたので試してみました.例によって参考書はいつものですが,今回は毛色を変えて MSDN Magazine の最新記事の引用文でも. 簡潔さを目指したために、多数の基事項を省略しました。CLR のホスト機能の完全な概要に関しては、Steven Pratschner 氏の著書 Customizing the Microsoft .NET Framewor

    CLR Hosting : 仮想メモリ編 (1) - NyaRuRuが地球にいたころ
    Wacky
    Wacky 2006/06/17
    今回は,CLR Hosting API を使用して,CLR が使用する Virtual Alloc/Virtual Free をフックするコードサンプルを作ってみました
  • Boost Installer - かそくそうち

    メインマシンは引越し運送中のため、古いノートで作業しています。 せっかくなので、Boostのセットアップに先日公開されたBoost Installerを使ってみました。 http://lists.boost.org/Archives/boost/2006/05/105004.php インストーラはNSIS(Nullsoft Scriptable Install System)で作成されていて、コンパイル済みファイルをWebからダウンロードしてきます。 インストールの流れは、 ミラーサイトの選択(jpサイトあり) コンパイラとバリアント(ランタイムライブラリやスレッディングの種類)の選択 コンポーネント(ヘッダ、ドキュメント、Boost.Build、各種ライブラリ)の選択 インストール先の選択(デフォルト=C:\Program Files\boost\boost_1_33_1) といった具合

    Boost Installer - かそくそうち
    Wacky
    Wacky 2006/06/10
    Boostのセットアップに先日公開されたBoost Installerを使ってみました。インストーラはコンパイル済みファイルをWebからダウンロードしてきます。
  • 革命の日々! Cプリプロセッサの文字列化まじっく

    PGotMoL annex さんの記事から void _debug_printf(const char *); #define _num_to_str(num) #num #define num_to_str(num) _num_to_str(num) #define debug_printf(msg) \ _debug_printf(msg " at " __FUNC__ ":" num_to_str(__LINE__)) のように、ダミーのマクロを通せばよい。 なぜこうなるのか、プリプロセッサの動作は想像するしかないが、文字列化の識別子の優先度は高いようだ。 とあるけど、gccのプリプロセッサのinfoにズバリ書いてあるで~ Macro Pitfalls: (マクロの落とし穴) Separate Expansion of Macro Arguments: の項 事前走査は、引数が文字列

    Wacky
    Wacky 2006/06/10
    事前走査は、引数が文字列化されたり連結されたりする場合には行われない
  • インラインアセンブラで学ぶアセンブリ言語 第1回:CodeZine

    はじめに アセンブリ言語は、コンピュータのCPUが直接理解することができる命令である機械語を記号化した言語であり、機械語と対の関係にあります。アセンブリ言語の1文は1つの機械語に置き換わります。機械語は2進数だけで構成されるバイナリデータで、命令の意味を表すオペコードと呼ばれる値でCPUに指示を出しています。人間が直接機械語を読み書きする場合は、16進数を使うのが一般的です。どちらにしても、数値だけで表現されるプログラミングは人間が読み書きするには不向きなので、数値の代わりにアルファベットによる記号を与えたものがアセンブリ言語なのです。マシン後に対応したアセンブリ言語の記号のことをニーモニックと呼びます。 しかし、ニーモニックを学習するだけではアセンブリ言語は使えません。問題は、CPUがメモリと通信を行う際に発生するさまざまなアドレスの計算です。機械語の世界では変数や関数という概念は存在せ

    Wacky
    Wacky 2006/06/10
    Microsoft Visual C++(以降 VC++)のインラインアセンブラを用いて体験していただきます
  • プログラミング・開発者・ソースコード CodeZine:C++におけるデータのソート方法の比較(C++, STL, ソート)

    はじめに この記事の目的は、「C++のSTLにはデータをソートする方法がいくつか存在するが、ソート処理を簡単に、かつ効率のよいコードはどれか…」を調べることです。 ここでは、自前のソートアルゴリズムを作って速度を比較したり、既存のソートアルゴリズムを最適化するといったことは目的としません。公開されているSTLをありのままの姿で計測します。コードの保守性や移植性、可読性を考慮して「いたって普通」な書き方が一番メリットが受けられると考えていますし、より多くの人に恩恵をもたらすと考えるからです。 自前のソートアルゴリズムの構築や、既存のアルゴリズムの最適化は、可読性や移植性を悪くするため、得られるメリット(高速処理による時間)よりもデメリットが大きいと考えているのです。よって、ここで検証するコードは「いたって普通」な書き方であり、可読性を重視した書き方になります。 自前でソートアルゴリズムの構築

  • 2006-05-21

    親が使っているブラザー工業製の MFC 5840CN がおかしいらしい。 続きを読む 新しいやつは Flash でいろいろやってるみたいだけど、(よく2日分を3つのブラウザで同時に編集開始だけしたり*1するので)これ2つ以上並列に動かした状態でバックアップとか走ったりしてるのは大丈夫なのかな。 *1:リンク元とか見るのに編集を押すのがクセになってて ここのリンク元に最近頻出している id:Ozy さんのところ*1 にあった記述に関するちょっとした小話ですが。 *1:どうも id:yaneurao 経由っぽいので、や氏の影響の大きさを感じる 続きを読む id:Ozy さんのところでは、PKU 用の専用クライアント開発が進んでいるが、(以前に GDNJ にも書いたけど)PKU の Judge のようなコードをあげてどうこうするシステムというのは個人的には興味があって、そういったゲームが作りたか

    2006-05-21
    Wacky
    Wacky 2006/05/27
    Win32でコマンドプロンプトをアプリケーションから起動する場合...IE4 統合シェル環境以降ではマジック名 CMD を指定すると「現在のユーザのデフォルトコマンドラインシェルプログラム」を起動する
  • マウスジェスチャを実装する(Win32版):CodeZine

    はじめに 私はGUI環境で簡単にコマンドを送ることができるマウスジェスチャが大好きです。今回はそんなマウスジェスチャを作ってみましょう。なお、.NET版については別稿を参照してください。対象読者 C言語(またはC++言語)でWin32のプログラムを開発したことがある方。必要な環境 少なくとも32bitWindows環境が必要です。64bit環境でのテストはしていませんが大丈夫だと思います。設計 まずは構想を練らなければなりません。今回はサンプルなのでこちらで決めさせて頂きます。右ボタンが押されたら始まり、離されたら終わる。入力可能方向は4方向(斜め判定は無し)同じ方向への連続入力は無し(普通はこうすると思います)ある方向に動かすと反対側の移動量は0になる縦横の移動量を比較して多い方だけを考える(より自然な移動になる)ウィンドウの外に出てもしっかりと動作するようにする(これを行わないと変な

    Wacky
    Wacky 2006/05/20
    マウスジェスチャをC言語(またはC++言語)を利用して実装する方法を紹介します。
  • いやなブログ: Cのポインタを整数に変換する

    Cのポインタを整数に変換する Cのポインタを整数に変換したいときがあります。このとき問題になるのは、ポインタのサイズが int と同じとは限らないということです。たとえば、 x86_64 の 64ビットのバイナリでは sizeof(int) = 4, sizeof(void *) = 8 となります。ポインタと同じサイズの整数を使いたい場合は C99 で導入された stdint.h で提供される intptr_t または uintptr_t を使います。 stdint.h には他にも int32_t や int64_t など、サイズつきの整数の型も提供されています。たとえば、uint64_t を使うと、64ビットの符合なし整数を扱うことができます。 私の場合、C++ のプログラムで void * から直接 uint64_t にキャストしようとしてはまりました。次のプログラムを x86_32

    Wacky
    Wacky 2006/05/03
    stdint.h ではポインタと同じサイズの整数の型 intptr_t, uintptr_t およびその他の便利な整数の型が提供されています
  • checkstack.pl で関数のスタック消費量を調べる - bkブログ

    checkstack.pl で関数のスタック消費量を調べる Linux カーネルのソースコードに付属する checkstack.pl を使うと、C/C++ のプログラムの関数のスタック消費量を調べることができます。checkstack.pl は objdump -d のディスアセンブルの出力からスタックポインタの操作をパターンマッチしてスタックの消費量を計算しています。 入手方法 checkstack.pl は Linux カーネルのソースコードに付属しています。Debian GNU/Linux sarege なら次のようにコマンドラインから実行して取得できます。ソースツリーに含まれる scripts/checkstack.pl が目的のものです。 % apt-get source kernel-source-2.6.8 使い方 checkstack.pl の使い方は簡単です。スタックサイ

    Wacky
    Wacky 2006/05/03
    Linux カーネルのソースコードに付属する checkstack.pl を使うと、C/C++ のプログラムの関数のスタック消費量を調べることができます。
  • flexによるVC++7.1で利用可能な再入可能字句解析器の生成 - Ilaliart

  • VS.Net2003でbison - Ilaliart

    Wacky
    Wacky 2006/05/03
    一年前にやったときはbisonの設定とかもっと面倒くさかったんだけど、今はセットアッププログラムが全部やってくれるのね。素晴らしい。
  • 革命の日々! glibcを一部分だけビルド

    鮎田屋ドットコムというサイト の このへんから GLIBC で、ld.so だけコンパイルする(Sun Sep 22 2002) 備忘録として。これができんと、オチオチとデバッグコードもはさめない。 1.まず、普通にビルド(configure & make)する 2."cd elf" で ELF ディレクトリへ 3."OBJDIR=../build-i386-linux" で、オブジェクトの入るディレクトリを指定 4."make objdir=$OBJDIR $OBJDIR/elf/ld.so" でビルド 難解ホークス。 いちいち全ビルドなんてやってられないっす 追記: さっきやってみたらRHEL4では出来なかった。元々の記事が2002年のものなので、glibcのバージョンがだいぶ変わっているのでそのせいかも

    Wacky
    Wacky 2006/05/03
    GLIBC で、ld.so だけコンパイルする,備忘録として。これができんと、オチオチとデバッグコードもはさめない。
  • 革命の日々! シーケンスロック その5 volatileがダメな理由

    どもども。またまた間隔があいてしまいましたがシーケンスロックな話しの続きです。 前回の記事で坩堝さんから面白い指摘をうけたので今回は予定を変更してvolatileの話をしたいと思います。 retをvolatileにするだけではうまくいかないんですよね? どういう風になるんだろ. なるほど、たしかに世のC言語の参考書を見るとvolatileはある種の最適化を妨げる効果を持つと されています。 これだけ見ると、volatileとつけるだけすべての最適化が無効になってうまく動きそうですね。 しかし、その理屈は微妙におかしいのである 多くの人が「ある種の」という言葉を拡大解釈しているがvolatileは来スレッド同期に使えるようなシロモノではないのである。 つづきは、続きを読むからご覧ください。 あと、お願い。 今回の話は前提知識がいろいろとあるので、末尾のご参考にあげたURLを読んでから 読ん

    Wacky
    Wacky 2006/04/08
    何度も書いていますが、volatileはコンパイラの最適化にのみ影響を及ぼすものなので CPUが勝手にメモリアクセスをキャッシュしちまうのは防ぎようがありません。 別途CPU(&OS)依存の方法で制御する必要があります。
  • listexp.exe / listexp2.exe : ちよクロシステム

    CloneCD4勝手に日語化 CloneCD4_jp.lzh 18,440Byte (2002/07/05) CloneCD4用の言語ファイルです。 CloneCDを別途用意し、インストールしておいてください。 この言語ファイルは以下のバージョンのCloneCDに対応しています。 4.0.0.0 4.0.1.6 旧版 CloneCD_jp_106.lzh CloneCD_jp_106_nh.lzh CloneCD_jp_106_src.lzh CloneCD_jp_105.lzh CloneCD_jp_105_nh.lzh CloneCD_jp_104_.lzh CloneCD_jp_104_nh_.lzh CloneCD_jp_103.lzh CloneCD_jp_103_nh.lzh CloneCD_jp_102.lzh CloneCD_jp_102_nh.lzh CloneCD_j

    Wacky
    Wacky 2006/03/21
    アプリケーションとDLLの間に入る偽のDLLを作るときに役立つツールです。listexp.exeはエクスポート情報をリストアップします。
  • プロファイラ

    あんま日語情報無いものも多いので適当に要点だけまとめて書いてみます。

    プロファイラ
    Wacky
    Wacky 2006/03/05
    gprof はめんどいけど正確。コンパイル時に仕込みが絶対必要。 google-perftools はなんか中途半端な気。sysprof は手軽。外部から GUI でスタックトレース見れる。oprofileは いい CPU なら gprof よりいいくらい。
  • ライブラリの外に公開するシンボルを制限する - bkブログ

    ライブラリの外に公開するシンボルを制限する C言語にはファイル内 (コンパイル単位) からしかアクセスできない static 関数と、別のファイルからもアクセスできる非static 関数があります。しかし、ライブラリを作成する上では、この2つのスコープだけでは不十分なときがあります。 記事では GNUの開発環境において、ライブラリの外に公開するシンボルを制限する方法を紹介します。 次のような例を考えてみます。 % cat a.c // foo() は libfoo の主役の関数なので公開したい void foo() { bar(); } % cat b.c // bar() はライブラリの中だけで使われるべきなので当は公開 // したくない。しかし別のファイルに含まれる foo() から使われ // ているので、非staticにせざるをえない void bar() { } このようなコ

    Wacky
    Wacky 2006/03/04
    ライブラリの外に公開するシンボルを制限する方法を紹介します。
  • Boost.Foreachの実装の説明 - p_stade;

    Conditional Love: FOREACH Reduxにあります Foreachに興味ない人でも必見

    Boost.Foreachの実装の説明 - p_stade;
  • tomapd == 22% - Gauche を C プログラムから使う

    libgauche をリンクすればできるみたい。http://www.practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AYAGHG%3AIntroduction を参考に、外部の scheme コードをロードして結果を表示するプログラムを書いてみた。 main.c で同じディレクトリにある test.scm をロードして、関数 test を評価。結果は と決めうち。 /* main.c */ #include <stdio.h> #include <gauche.h> ScmObj test() { Scm_Load("./test", 0); ScmObj expr = Scm_ReadFromCString("(test)"); return Scm_Eval(expr, SCM_OBJ(Scm_UserModule())); } int

    tomapd == 22% - Gauche を C プログラムから使う
  • 更新履歴兼雑記 - C で curry 化 @x86

    http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/h/curry を Sun から x86 に。 C言語は便利で楽しいなあ、と思わざる得ないのである。 に激しく同意なのです。 #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> int (*curry(int (*F)(), int A))() { char *code = (char*)malloc(18); *(char*)code = 0x55; *(short int*)(code+1) = 0xe589; *(short int*)(code+3) = 0x75ff; *(char*)(code+5) = 0x08; *(char*)(code+6) = 0x6a; *(char*)(code+7) = (ch

    更新履歴兼雑記 - C で curry 化 @x86
  • CLR 2.0 でのデバッグ実行 - NyaRuRuが地球にいたころ

    827 :デフォルトの名無しさん :2005/12/24(土) 00:19:48 C#コンソールアプリの新規プロジェクトを作る 参照設定は、System, System.Drawing 以下をコピペusing System; using System.Drawing; class Program { static void Main(string[] args) { int w = 1000; int h = 1000; DateTime dt = DateTime.Now; Bitmap b = new Bitmap(w, h); for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) b.SetPixel(x, y, Color.FromArgb(x + y)); TimeSpan ts = DateTime.Now - dt;

    CLR 2.0 でのデバッグ実行 - NyaRuRuが地球にいたころ
    Wacky
    Wacky 2006/02/18
    最も CPU 占有率が高かったのは LogHelp_TerminateOnAssert という関数でした