タグ

gccに関するhyoshiokのブックマーク (13)

  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div

    hyoshiok
    hyoshiok 2009/01/19
    42
  • Rolling with Ruby on Rails

    Now, next, and beyond: Tracking need-to-know trends at the intersection of business and technology AI/ML Few technologies have the potential to change the nature of work and how we live as artificial intelligence (AI) and machine learning (ML). Future of the Firm Everything from new organizational structures and payment schemes to new expectations, skills, and tools will shape the future of the fi

    Rolling with Ruby on Rails
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    hyoshiok
    hyoshiok 2008/11/29
    7
  • 機械語を配列に格納して関数として実行するだけの簡単なお勉強を CentOS 5 で using mprotect() - 本当は怖いHPC

    配列にマシン語を直接格納して関数として実行する、っていうのをバリケンさんの『バリケンのRuby日記 - バイナリアン的C言語入門(2) - 整数の配列で関数を作ってみる』を見ながらやってみたが、見事にSEGVで死んでしまうのでいろいろ試行錯誤した記録。3時間くらいかかった。死んだ。 結論: Binary Hacksを読めばいい。持ってないので明日買いに行く。 説明 バリケンさんのエントリに書かれていることは、Linuxのカーネル2.4系やWindowsXPでは問題なく実行できる。だけど、CentOS に搭載されているLinux カーネル 2.6から、PaX という機能がカーネルにマージされ、ハードウェアのNXビット(もしくはそのエミュレーション機能)が実装されている。 このため、プロセスの実行イメージのデータセグメントにあるデータを関数として実行しようとすると、SEGVでプロセスが殺されて

    機械語を配列に格納して関数として実行するだけの簡単なお勉強を CentOS 5 で using mprotect() - 本当は怖いHPC
  • tracef - function call tracer

    このページは書きかけです。 hogetraceという名前はあんまりなので自重してtracefに変更しました。 TOC 概要 実行例 動作環境 (OS) ダウンロード ビルド環境 ビルド手順 解析可能なプログラム スクリーンショット forkするプログラムの解析 execするプログラムの解析 再帰 マルチスレッド みんなだいすき例外スロー mainの前に呼ばれる関数 制限事項 コマンドラインオプション 仕組み (つぶやき) 類似ツール 概要 hogetrace tracefは、Linux向けの「関数コールトレーサ」です。 自作関数の先頭と末尾にも0xCCを仕掛けるようにしたptraceベースのltraceもどきです。おわり。 ディストリビューションに標準で含まれているltraceコマンドに似ていますが、次のような特徴・相違点があります。 DSO(DLL)内のライブラリ関数の呼び出しだけでなく

    hyoshiok
    hyoshiok 2008/09/29
    17
  • hogetrace - 関数コールトレーサ - memologue

    でかいソフトウェアの、大量のソースコードを短時間で読む必要が生じたので、その補助ツールとしてptrace(2)ベースのLinux用関数トレーサを自作しました。こういうツール上でまずソフトウェアを実行してみて、どのファイルのどの関数がどういう順で呼ばれるか把握おけば、いきなりソースコードの山と格闘を始めるより楽かなーと思いまして。せっかく作ったので公開します。 http://binary.nahi.to/hogetrace/ straceはシステムコールだけ、ltraceは共有ライブラリ(DSO)の関数呼び出しだけ*1をトレースしますが、このツールは、実行バイナリ中の自作関数の呼び出しもトレースします。例えば再帰で1から10まで足し算するソースコードを用意して % cat recursion.c #include <stdio.h> int sum(int n) { return n ==

    hogetrace - 関数コールトレーサ - memologue
    hyoshiok
    hyoshiok 2008/09/29
    72
  • ホワット・ア・ワンダフル・ワールド GNU C 拡張を使って関数のコールグラフをプロファイルする

    今スゲー酔っ払ってるので,メモだけ.指がうまく動かなくてタッチタイプがミスる.てか,うちのマウス,ゴミがつまりすぎだよなぁ.さっぱり回らない. きっかけは,rayfill さんのコメント. コールグラフ 呼び出しに関する情報ならコンパイル時に-pgつけてプロファイラまわせばでませんでしたっけ? x86環境でlinuxとかならValgrindのプラグインのCallgrindでdotファイル & Graphviz経由だったかでコールグラフが書けたと思います。 gcc拡張使ったこういう手(http://www-06.ibm.com/jp/developerworks/linux/050722/j_l-graphvis.shtml)もあるようです。 finstrument-functions オプションの説明とかは,件の ibmdeveloperworks か,BINARY HACKS の 「HA

  • バイナリよりな一日 - (ひ)メモ

    今日はひょんなきっかけで、 strace (HACK #82) ltrace (HACK #83) gcc -finstrument-functions (HACK #77) LD_PRELOAD でもりっと挿入 (HACK #77, #60) addr2lineでアドレスから関数の名前を引く (HACK #15) valgrind --tool=callgrind --trace-children=yes (valgrind [ヴァルグリンド]自体は HACK #54, #55, #56) のあたりを、同僚たちとわいのわいののりのりで手を動かしながら疾走した一日でした。 んが、うちに帰ってきて『BINARY HACKS』を読み直すと、HACK #ナンバで記したとおり、ほとんどがこのに書かれてました。すごいよ『BINARY HACKS』すごいよ。 今日のできごとは、たぶん、あそこに(だれ

    バイナリよりな一日 - (ひ)メモ
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    hyoshiok
    hyoshiok 2008/09/27
    1
  • gdb豆知識(続き) 2008-09-27 - 未来のいつか/hyoshiokの日記

    gdb豆知識(d:id:hyoshiok:20080926#p1)の続き。 Windowsの開発環境は知らないのだけど、噂によると素敵なIDE(統合開発環境)が整備されていて、マウスでぐりぐり、ヘルプも充実、簡単簡単らしい。それから比べると、GNU Emacs+gcc+gdbというのは微妙にレトロ感あふれる。とは言うもののデバッグのプロセスはIDE的マルチウィンドウ、GUIでグリグリであろうとなかろうと基は変らないので、よしとしよう。 コンパイル時のオプション gccの-gオプションを付ける。Makefileのコンパイルオプションは通常CFLAGSなのでCFLAGS=-gとしておく。最適化オプション(-O)と同時に付けることができるので(素晴しい)、最適化オプションも適当に付けておく。 時々、デバッグオプション(-g)を付けるときは最適化オプションをつけない、あるいは-O0(アルファベッ

    gdb豆知識(続き) 2008-09-27 - 未来のいつか/hyoshiokの日記
  • Rubyist Magazine - YARV Maniacs 【第 3 回】 命令ディスパッチの高速化を読む (1) - hogelogの日記

    http://d.hatena.ne.jp/hogelog/20080704/p1 で書いたVMを高速化。というかコンパイラさんの頑張りを見てみよう。 まず前回書いたvm.cをちょっとだけ修正。 @@ -1,6 +1,9 @@ #include <stdio.h> #define STACK_SIZE 30000 +#ifndef LOOPNUM +#define LOOPNUM 100000 +#endif typedef enum Instruction Instruction; typedef struct Code Code; @@ -90,7 +93,7 @@ {I_PUSH, 1}, {I_ADD, 0}, {I_DUP, 0}, - {I_PUSH, 100000}, + {I_PUSH, LOOPNUM}, {I_GT, 0}, {I_IF, 1} }; でまあ適当にコンパ

    Rubyist Magazine - YARV Maniacs 【第 3 回】 命令ディスパッチの高速化を読む (1) - hogelogの日記
    hyoshiok
    hyoshiok 2008/09/19
    2
  • はじめてのにき(2007-11-21)

    _ switchの展開 http://alohakun.blog7.fc2.com/blog-entry-878.html を見てたしかにどういう感じなのかなーと。 たぶん stmt.c の expand_case @gcc-4.2.2 。 最初に unique ならラベルの数とか適当に調べて、 default 以外ターゲットなかったらそこに jump とか。 んで bit なんちゃらがどうこうってのが入ってんだけど、 よくわからんかったからぐぐったら これ面白いな。 http://gcc.gnu.org/ml/gcc-patches/2003-01/msg01733.html int main(int i) { switch (i) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '

    hyoshiok
    hyoshiok 2008/09/19
    5
  • ホワット・ア・ワンダフル・ワールド Optimizing direct threaded code by selective inlining

    東大さんで今,mini-python のインタプリタを作るという演習をやっているそうな. んで,今 twitter の柱の hayamizu 氏を筆頭に,空前の VM (仮想マシン) ブームが起きている感じ. ちなみに,仮想マシンので僕が読んで良かったのは,Java 仮想マシン仕様の第二版と,コンパイラとバーチャルマシンってかなぁ (そんなに詳しくない). ところで,仮想マシンの構造ってのは,ナイーブには単純で,ひたすら switch 文で命令を引いて実行するだけ. なので,switch 文をテーブルに展開して,直接命令のコードの場所に goto したりする最適化が非常に効く.というのがこの論文. Optimizing direct threaded code by selective inlining (PDF) # 追記 : あ,ACM ポータルの論文は,北大ドメインからじゃないと

    hyoshiok
    hyoshiok 2008/09/19
    7
  • 1