タグ

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

  • 第5章 ガ-ベージコレクション

    プログラムの実行時イメージ 突然だが、章を始めるに先立ち、プログラム実行時のメモリ空間の状態につ いて予習をしておこうと思う。この章ではコンピュータの低レベルな部分にか なり踏み込んでいくことになるので、あらかじめある程度の知識を仕入れてお かないと太刀打ちできないのだ。それにこの後の章になればいずれ必要になっ てくる。ここで一回やってしまえば後が楽だ。 セグメント 一般的なCプログラムではメモリ空間の中に以下の部分を持つ。 テキスト領域 スタティック変数やグローバル変数の置場 マシンスタック ヒープ テキスト領域はコードが置いてあるところ。二番目は見ての通り。マシンスタッ クには関数の引数やローカル変数が積まれる。ヒープはmalloc()で割り当てて もらうところだ。 三つめのマシンスタックについてもう少し話そう。マシン「スタック」と言う くらいだから当然スタック構造をしている。つまり

  • KMC Staff Blog:LLVM の JIT を使ってみる (3)

    Wacky
    Wacky 2010/04/02
    LLVM の JIT API を使うと、関数を返す(作る)関数が書けます。肝は ExecutionEngine の getPointerToFunction() API で、JIT 済みの関数(コード)へのポインタを取得できます。
  • ホワット・ア・ワンダフル・ワールド MinGW/VC++でlibcを使わずにプログラムを書く

  • Native Clientの仕組みはどうなっているのか? - やねうらお−よっちゃんイカはしばらく買わずにiPhoneだけに注力する男

    Googleが、Webブラウザ上でネイティブバイナリコードを実行する「Native Client」を公開した。 Native Client http://code.google.com/p/nativeclient/ Google Earth,Quakeなどがすでに動いているようだ。 これはすごい!ブラウザ上でX86バイナリを動かす「Native Client」 http://www.moongift.jp/2008/12/native_client/ サンドボックスで安全性確保、オーバーヘッド5% ブラウザでx86バイナリ実行、グーグルが新技術 http://www.atmarkit.co.jp/news/200812/09/nacl.html あと、サンプルのlife.ccにSDL_surfaceと書いてあるのでSDLの描画まわりが既に動いているのだろうから、今後、たくさんのアプリがN

    Native Clientの仕組みはどうなっているのか? - やねうらお−よっちゃんイカはしばらく買わずにiPhoneだけに注力する男
    Wacky
    Wacky 2008/12/12
    すべての間接ジャンプはnacljmpという疑似命令を用いる。
  • [雑記] 仮想関数テーブル

    概要 「仮想メソッド」というものがどういう仕組みで実現されているのかを説明します。 (C / C++ の知識がある程度必要なので、 その辺りが全く分からない場合には内容が高度すぎるので読み飛ばし推奨。) 「.NET Framework」 の 「IL」 は、 仮想メソッド呼び出し用の命令を持っていたりします。 ですが、一般的な PC に使われている CPU が「仮想メソッド呼出し命令」みたいなものを持っているわけではなく、 .NET Framework が適切な命令に置き換えて仮想メソッド呼び出しを実現してくれています。 (要するに、C# プログラマにとっては気にする必要のない部分です。 このページの内容は、「でも中身の分からないものを使うのはなんとなく不安」という人向けです。) 一般に、仮想メソッド呼び出し(C++ など、言語によっては仮想関数呼び出しという言い方をします)は、 仮想関数テ

    [雑記] 仮想関数テーブル
  • CRunTiny.org - Lighten the Load of your C/C++ Runtime Libraries

    Wacky
    Wacky 2008/02/03
    VC++のランタイムと互換性のある小さなランタイムらしい
  • Home - Noppiのおぼえがき

    Noppiのおぼえがき

  • DSAS開発者の部屋:Win32 プログラムのデバッグTips (1)

    ■ はじめに ひとつのプログラムを完成させるまでには、多くの場合「デバッグ」という作業が必要です。 まったくバグのないプログラムを一気に書き上げるのは難しいことですから、 プログラミングの際には実行時のエラーを見つけやすくするための工夫が必要ですし、 実際にエラーが発生した場合にはできるだけ手際よく対処したいものです。 デバッグを行う上での最初の目標である「原因の特定」を効率的に行うための ツールや流儀はプラットフォームや使用言語により一様ではありませんが、 ここではネイティブな Windows プログラムをデバッグする上で役に立つ小技をいくつかとり上げてみたいと思います。 今回は、自作のプログラムの実行中にプロセスが異常終了する状況において、 問題箇所を手早く探すための方法のひとつをご紹介します。 記事では Microsoft Visual C++ を開発環境と想定しています。 どうやら

    DSAS開発者の部屋:Win32 プログラムのデバッグTips (1)
  • mitsunari@cybozu labs: xbyak アーカイブ

    LL魂2007(LLSpirit)のライトニングトークで発表したときに使ったデモのコード(Python+Xbyak)を公開します. download 使い方は添付のreadme.txtを参照してください. ベンチマーク結果をあげておきます. 速度比(小さいほど速い) ループ回数 実行時間(sec) 処理時間比(Xを1とする) Xbyak(可変) 100000 12.14 1 python(可変) 100 10.73 894 psyco(可変) 1000 40.8 340 python(固定) 1000 42.55 354 psyco(固定) 10000 32.91 27.4 C++(固定) 100000 13.94 1.16 修正python* + Xbyak 100000 8.75 0.72(参考値) psycoはPythonのJIT実行環境です.Xbyakはこれの特別版と考えればよいで

  • C言語のパーサー - 組み込まれたエンジニア

    Jutta DegenerがANSI CのYACCとLEXのパーサーを公開している。 これ、少し手を入れると、BISONとFLEXが問題なく通る。 (FAQにはshift/reduce conflictが1つ出ると書かれているけど、%precを使って逃げられるので、エラーなしのファイルにはすぐ変更可能) BISON・FLEXで通る文法ファイルがあれば、色々とやってみたいことがあるので、まじめに読んでみよう・・ ところで、このパーサー、著作権表示がまるっきりないんですけど・・ (日の著作権法は何もしなくても、著作権が生じるけど、アメリカでは、積極的に著作権を主張しないかぎりパブリックドメイン扱いになるはず。これでいいのかなぁ?)

    C言語のパーサー - 組み込まれたエンジニア
    Wacky
    Wacky 2007/07/15
    Jutta DegenerがANSI CのYACCとLEXのパーサーを公開している。
  • C++と Pthreads でミニマルなHTTPサーバを書く - いやなブログ

    C++と Pthreads でミニマルなHTTPサーバを書く 『UNIXネットワークプログラミング』を読んでいると、自分でも何かネットワーク系の小さなプログラムを書いてみたくなりました。そこで、ミニマルなHTTPサーバを C++と Pthreads で書いてみました。 同じ著者の「詳解UNIXプログラミング」もそうだったように、今回のもほとんどすべてのページに、重要なことが書かれています(最後のほうのXTIの部分は例外かもしれませんが)。 たとえば、27章ではネットワークサーバの実装として、次の設計方針がそれぞれ検討され、実際のコード付きで解説されています。 クライアントごとに fork 事前に fork - 各プロセスで accept 事前に fork - ファイルロックで accept を保護 事前に fork - Mutex ロックで accept を保護 (PTHREAD_PRO

    Wacky
    Wacky 2007/07/14
    ミニマルなHTTPサーバを C++と Pthreads で書いてみました。
  • Parallel Computing

    Parallel Computing Parallel computing is a form of computation in which multiple operations are carried out simultaneously. Visual Studio 2012, the .NET Framework, and Visual C++ all contain extensive support for writing, debugging, and tuning parallel applications. Parallel computing is closely related to asynchronous programming, using many of the same core concepts and support. Asynchronous pro

    Parallel Computing
    Wacky
    Wacky 2007/05/20
    読み取り/書き込みロックは、複数のリーダーによる同時アクセスを許可するが、データの保護のために更新時にはライタの排他アクセスのみを許可する場合に使用されます。
  • ホワット・ア・ワンダフル・ワールド libtcc を使えば C は高階関数型言語になる

    ふと,qsort の第四引数に直接 C のコード片を渡せたら面白いんじゃないか ? とか思って,TCC を使ってみたら簡単にできました. つまり,こういうこと qsort(... , compile("int lambda(int *x, int *y) {return(*x>*y)?1:(*xtcc-0.9.23.tar.gz とかを持ってきて,tar xvf して configure ; make して su して make install しておいてください.TCC には,普通の爆速 C コンパイラ tcc と,C 言語のコード片を機械語に変換するライブラリ libtcc.[h/a] が含まれています.libtcc の API については,libtcc で C のソースコードを eval などを. ソースは,一見長めに見えますが,これは単に,libtcc.h で API として公開さ

    Wacky
    Wacky 2007/02/24
    qsort の第四引数に直接 C のコード片を渡せたら面白いんじゃないか ? とか思って,TCC を使ってみたら簡単にできました.
  • Cで実現する「ぷちオブジェクト指向」:CodeZine

    はじめに CodeZineではお初にお目にかかります、επιστημη(エピステーメー)です。最初のアーティクルはクラシックなCのお話。 昨今のアプリケーションはオブジェクト指向言語による実装が主流と言ってもいいでしょう。C++Java、VB.NETさらにはRubyPythonといったスクリプト言語まで、オブジェクト指向でない言語を探すのに苦労するくらいです。 記事では、今なお現役バリバリで活躍している手続き型言語の代表格(?)Cによる、オブジェクト指向のマネゴト(オブジェクト指向風味のCコーディングスタイル)を試みます。対象読者 もっぱらCを主な開発言語として使ってはいるけども、オブジェクト指向に興味と憧れを抱いている方。抽象データ型 手始めにオブジェクト指向の特徴の1つ、「抽象データ型(ADT:Abstract Data Type)」をCで実現してみます。抽象データ型とは、データ

    Wacky
    Wacky 2007/02/14
    Cによる、オブジェクト指向のマネゴト(オブジェクト指向風味のCコーディングスタイル)を試みます。
  • APIHijack - A Library for easy DLL function hooking.

    This library allows you to replace functions in other DLLs with functions from your own DLL. Download source files and demo project - 102 Kb Introduction Based on DelayLoadProfileDLL.CPP, by Matt Pietrek for MSJ February 2000. This code is intended to be included in a DLL inserted through a global Windows Hook (CBT hook for example). It will replace functions from other DLLs (e.g. DDRAW.DLL) with

  • Xbyak - x86 JIT assembler -

    Xbyak - x86, x64 JIT assembler - .frame(English) .frame(x86の究極の最適化手法?) Xbyak(カイビャック)はx86(IA32), x64(AMD64, x86-64)のマシン語命令を生成するC++のクラスライブラリです. プログラム実行時に動的にアセンブルすることが可能なため, 柔軟な最適化(動的コード生成)が可能となります(利用シーン:量子化の高速化, 式の計算). 暗号ライブラリに使って高速な実装をしてみた(very fast etaT pairing for Core 2 Duo) ヘッダファイルオンリー xbyak.hをインクルードするだけですぐ利用することができます(32bit, 64bit両対応). Windows Xp(32bit, 64bit), Vista/Linux(32bit, 64bit)/Intel

    Wacky
    Wacky 2007/01/20
    Xbyak(カイビャック)はIA32(x86)のマシン語命令を生成するC++のクラスライブラリです.
  • C/C++ - typecastをmethodに : 404 Blog Not Found

    2006年12月05日00:30 カテゴリiTech C/C++ - typecastをmethodに 実はこれと類似のことも、ある程度Cでやることが出来る。 404 Blog Not Found:電脳言語における祖先の呪い--演算子篇 型を変換するのも「タイプキャスト」ではなく「メソッド」ということにしてしまえばいいのだから。odz buffer - type declaration とか cast とか たしかに Ruby なんかでは obj.to_i と書いたりするが、cast にも int => double のように、実際の型変換が発生するタイプ(C++ でいう static_cast)と void * => char * のようにコンパイラに変数の取り扱い型を指示するためだけで演算の発生しない*2 cast (C++ でいう reinterpret_cast, const_ca

    C/C++ - typecastをmethodに : 404 Blog Not Found
  • C++ で SICP - memologue

    計算機プログラムの構造と解釈 の問題を、Schemeで一問一問解いてゆくのが流行りな2006年でした(師走気分)。このSICPをHaskellやCleanで解いている方はいますが、意外にもC++で解いている人が見当たらないので(注: あたりまえ)、C++のテンプレートはさっぱりよくわからんなぁと思いつつ適当にやってみます。ネタです。 [ネタ1] exercise 1.45, 1.46 まずは、問題1.45-1.46を。これらは1章の最終問題で、1章で学んだ手続き抽象のテクニック全てを使う感じがして楽しいです。xのn乗根を反復改良法で求める関数 nth-root を作るという設問です。 まずはSchemeで解く 私の拙いスキーム力を用いて書いてみるとこんな感じ*1? (define (compose f g) (lambda (x) (f (g x)))) (define (repeated

    C++ で SICP - memologue
  • GCC some extensions

    gcc(Gnu C Compiler)の拡張文法 [警告!] C/C++言語初心者はこのページを読まないでください。 このページではgcc独自のC/C++拡張文法について解説します。 これらの拡張文法が可能にする機構は確かに便利なのですが、 もちろんANSI規格に従っていないので、一般的には使うべきではありません。 C/C++言語文法を学び始めている初心者はこれらgcc拡張文法を 知るべきではありません。C/C++言語を正しく理解する上で大きな 支障となります。 C/C++言語を十分に熟知した者は、gccがこのようなこともすることを 「雑談」として知っておくと楽しいかもしれません。もちろん 実戦に使うべきではありませんが。しかし初心者が偶然に、これらの 機能を使ってうまくいく場合がありますので、そのような初心者を 見つけたら、それが標準規格ではないことを注意してください。 配列変数をコピー

  • コールバック - Mona OS developers Wiki

    経緯 † Monaでスレッドに引数を渡せるようになりましたが、SUNEO/007.まだ投げないでEDS1275さんより、ラッパーを挟まずにC++と絡めることができるかどうかという問題提起がありました。 結論から言うと、コールバック関数の呼び出し規約が、 cdeclであれば可能。 fastcallでは不可能。 ↑ メンバ関数の正体 † 次のようなソースを用意します。(test1.cpp) class Test { public: void test(); }; void Test::test() {} void call() { Test t; t.test(); } Intel形式でアセンブリを出力します。 $ g++ -masm=intel -S test1.cpp 出力されたtest1.sより、call()中のt.test();を抜き出してみます。 lea eax, [ebp-1] m