タグ

Cに関するhat-tunのブックマーク (7)

  • GDB Archives - ファイヤープロジェクト

    Skip to contentCategory: GDB223月2007 watch変数値の変化を追跡できるとうれしいかもしれない.変数... Fujiko feature, GDB223月2007 プロファイル(gcc)2003-07-20T15:13+09:00 mat... Fujiko feature, GDB193月2007 とにかくちょっと使ってみるgdbをとにかくちょっと使ってみた.準備gdbの起動... Fujiko feature, GDB153月2007 continueとステップ実行breakした後処理を続けるにはcontinueで継... Fujiko feature, GDB113月2007 attachなんらかの理由でgdbからいきなり起動できないプログ... Fujiko feature, GDB093月2007 プログラムのフロー(cflow)ctagsやe

  • プログラムの森 30日でできる!OS自作入門 〜3日目-その2〜

    目次へ 前へ  次へ 3日目 その2です。 更新が1週間空きましたが、別にサボっていたわけではありません。 著者製ツールを極力使わないという自分ルールに縛られていました。 具体的にいうと、ld等のリンカに当たる、obj2bim と bim2hrbというツールです。 このツールを使用せずに、アセンブラで作成したオブジェクトファイルと、 C言語で作成したオブジェクトファイルをリンクしようとしていました。 とりあえず、順番にいきます。 今までアセンブラのみでしたが、今回からC言語が加わっています。 それに伴って、OSの体であるoslite.sysの作り方が大きく変わっています。 流れを書くと、 アセンブラでOSのヘッダー部分を記述(asmhead.asm) C言語でOSの処理部分を記述(bootpack.c) アセンブラでC言語だけでは手に負えない部分を記述(nasmfanc.asm) 2と3

  • MALLOC

    時事ネタ いや、「今、fj.comp.lang.cが熱い!」という話は ちょっと前から聞き及んではいたのですが、 流量が尋常じゃないらしいので、 忙しさもあって読むのを控えていたんですけど、 先日、大筋を拾い読みしてみました。 確かに熱いですねえ。 いったん収束するかなあ、と思ったら、なんかまた泥沼の気配が(^^; fjを読んでない人のために説明すると(って、 私も普段はあんまり読んでないんですが)、 「malloc()で確保した領域は、必ずfree()で解放しなきゃいけないか?」という 話題でして、「exit()する時には、OSが解放してくれるんだから 別にfree()しなくてもいいじゃん」という主張と、 「いや、malloc()には常に対になるfree()があるべきだ」という主張があって、 議論を呼んでいたのでした。 んで、私がどう思うかなんですが、 私は面倒臭がりなので、free()

  • 関数ポインタ配列の関数名を検索する方法とは? - OKWAVE

    #include <stdio.h> typedef void (*funcptr)(char*); struct func_t { const char* name; funcptr func; }; #define F(f) { #f, f } void a(char* str) { printf("a%s\n", str); } void b(char* str) { printf("b%s\n", str); } void c(char* str) { printf("c%s\n", str); } funcptr searchFunc(const char* n, struct func_t* table) { while ( table->name != NULL ) { if ( strcmp(table->name, n) == 0 ) { return table->fu

    関数ポインタ配列の関数名を検索する方法とは? - OKWAVE
  • 普通のやつらの下を行け: 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

    hat-tun
    hat-tun 2009/03/30
    backtrace
  • コラム【Linux道場 入門編】第6回 - Linuxの構造

    今回はLinuxの構造についてのお話です。構造といっても、ここでお話しするのはカーネルの内部的なことではなく、少し表面的な部分です。カーネルとそれをとりまくソフトウェアやライブラリ、ブートローダ以降の起動シーケンスにおける、プログラムの起動やディストリビューションごとの際などが今回のお話です。このあたりは、第二回の「ディストリビューションとは」で少し触れましたが、今回は少し踏み込んでお話したいと思います。 OSの構造には色々なタイプがありますが、Linuxカーネルのタイプはモノシリックカーネルと呼ばれ、全ての機能がカーネル内に1つに統合されています。これとは逆のタイプがマイクロカーネルと呼ばれるもので、マイクロカーネルはカーネルの機能をコンパクトにまとめてその他の機能は別の機能として実装し、それらが連携して動作するというものになります。 ※モノリシックとは「一枚岩の」という意味です。これ

  • C言語で実行時バックトレース - moratorium

    C言語で実行時バックトレース 2006-07-30 (Sun) 2:43 Unix glibcにはbacktrace()という便利な関数が有るらしいのですが、あえてその中身を自分で実装してしまおうという暇潰しをしてみました。 x86に限ると以下の様な感じでスタックフレームにアクセス出来てしまいます。 int get_stack_trace(void **result) { void **sp = (void**)&result - 2; // sp[0] : pointer to previous frame // sp[1] : caller address // sp[2] : first argument int n = 0; while (sp && n < 100) { result[n++] = *(sp + 1); void **new_sp = (void**)(*sp);

  • 1