# mcrash

## 名前

mcrash - カーネルメモリアナライザ

## 書式

mcrash [-q] [mapfile]

-q
  起動時のメッセージを抑制します。
mapfile
  カーネルのマップファイル。省略時は`/boot/System.map`。

## 説明

mcrashは、Linux用の crash コマンドです。
mcrashは`/dev/kmem`を通してカーネルメモリを参照し、 データを加工してテキストとして表示します。 mcrashによりLinuxカーネルの動作を解析することができ、 カーネルのデバッグや学習に役立てることができます。
mcrashはカーネルのヘッダファイルとあわせてビルドします。 つまり、カーネルごとに専用のmcrashを作ることになります。 そのかわり、対象カーネルのソースを修正する必要はありません。

### 基本コマンド型式

基本コマンドは以下の型式で呼び出します。

       コマンド名 [-オプション] [引数]

コマンド名
  カーネルのconfigにより使用可能なコマンドが異なります。 helpコマンドにより、 使用できるコマンドを確認できます。 ほとんどのコマンド名は構造体の名前に関係しています。
  ユニークに認識できるなら短く入力しても受け付けます (例えば "`quit`" の代りに "`q`" など)。
オプション
  コマンドにより使用可能なオプションが異なります。
引数
  空白で区切り複数指定可能です。 16進数またはカーネル内のシンボルまたはmcrashの変数で指定します。 それらを混在させた四則演算による指定、 およびメモリアクセス演算子 "`*`" によるポインタ指定も可能です。

  引数 | := | 項 | 引数 空白 項
  項 | := | 端 | 項 "+" 項 | 項 "-" 項 | 項 "*" 項 | 項 "/" 項 | 項 "<<" 項 | 項 ">>" 項
  端 | := | 16進数 | シンボル | 変数参照 | "sizeof(" 型 ")" | "*" 端 | "(" 項 ")"
  16進数 | := | [0-9a-fA-Z]+
  シンボル | := | [_a-zA-Z][_a-zA-Z0-9]*
  変数参照 | := | $[_a-zA-Z][_a-zA-Z0-9]*
  型 | := | [_a-zA-Z][_a-zA-Z0-9]* | "*"

  各項はクォーテーション('')またはダブルクォーテーション("") または大括弧([])により囲むことができ、 その場合は空白を含んでいてもひとつの項として扱われます。 また、クォーテーションの場合には変数展開が抑制されますが、 それ以外で囲んだ場合は中の変数は展開されます。

    引数の例
       dump c0100000
       dump jiffies
       dump $?
       dump *rscsi_disks
       dump "c0100000 + sizeof(int)" sizeof(int)

### 出力リダイレクト

基本コマンドの出力結果をファイルにリダイレクト可能です。

    例
       基本コマンド > ファイル名

ファイルが存在しない場合は、新しく作成されます。 ファイルが存在する場合は、後ろに追加(アペンド)されます。

### シェル呼出し

"`!`" に続けてコマンドを入力した場合、 シェルを呼出し外部コマンドを実行します。

    例
       ! ls -l

### パイプライン

基本コマンドの出力結果を外部コマンドの入力にすることができます。

    例
       基本コマンド ! 外部コマンド
       または
       基本コマンド | 外部コマンド

### 変数と代入コマンド

変数に値を代入することができます。 変数宣言の様なものは不要で、そのまま代入できます。

    例
       a=c0282000

変数に代入した値は、 "`$`"の後に変数名を指定すると取り出すことができます。

    例
       task_struct $a

### 特殊変数

mcrashには直接代入することが出来ない特別な変数があります。

"`$?`"
  ひとつ前のコマンドの結果(戻り値)を保持しています。 多くのコマンドは結果として何らかのチェーンのnextポインタの値を返します。
"`$-数字`"
  コマンドで表示された値を保持しています。 直前の行の最左に表示されている値が `$-1` に格納され、 そこから右へ順に `$-2`, `$-3`, … となります。
"`$数字`"
  関数の中で参照した場合、関数の引数を返します。 `$1`が第一引数です。

## 参考文献

(現在は休刊になりましたが) Linux Japanに2000年11月から連載された Linuxカーネル2.4の設計と実装

## 注意

- カーネルのダンプを採取したり、採取したダンプを解析する機能はありません。
- このドキュメントは、Linux 2.4 対応のmcrashについて記載しています。

mcrash, Copyright (C) 2002 ASANO Masahiro