• 検索結果がありません。

OSメモリダンプにおける関数引数解析機能に関する検討

N/A
N/A
Protected

Academic year: 2021

シェア "OSメモリダンプにおける関数引数解析機能に関する検討"

Copied!
2
0
0

読み込み中.... (全文を見る)

全文

(1)情報処理学会第 81 回全国大会. 6A-03. OS メモリダンプにおける関数引数解析機能に関する検討 高橋 香穂†. 伊藤 孝之†. †三菱電機株式会社. 松浦 陽平†. 情報技術総合研究所. 1. 背景と目的 Linux には、カーネルがクラッシュした際に、 レジスタやスタックの内容をメモリダンプとし て保存する機能がある。例外発生によるシステ ム停止などの障害発生時には、メモリダンプを 解析し、呼び出された関数やその引数を知るこ とが原因解明の手掛かりとなる。メモリダンプ の解析には解析ツールが利用可能であるが、引 数がレジスタを通して関数に渡される場合は、 スタックを参照して値を知ることが出来ないた め、機械的に解析できず、人手による解析を行 う必要がある。 そこで、上記課題を解決するために、レジス タ渡し引数に対する機械的な解析方式について 検討した。本稿ではその検討結果を述べる。 2 既存技術と課題 Linux のメモリダンプ解析ツールである crash コマンド[1]では、障害発生までに呼び出された 関数を表示することが出来る。この際、引数を 表示できるかどうかは、その渡し方によって異 なる。渡し方は呼出規約によって決められてお り、スタック渡しとレジスタ渡しがある。 スタック渡しは、引数をスタックに積んで関 数を呼び出し、引数を渡す方法である。この場 合、図 1-(1)のように、障害発生時にも同じ場所 に積まれたままであるため、解析ツールで機械 的に解析することが可能である。 一方、レジスタ渡しは、引数をレジスタに格 納して渡す方法であり、メモリアクセス回数を 減らし処理速度の向上に貢献する。しかし、図 1-(2)のように、レジスタが処理に使用されるこ とがあるため、スタック渡しと異なり引数が所 定の場所になく、解析ツールを用いた機械的な 解析が困難である。そのため、人手で解析する 手間と時間がかかる。 これらの課題に対し、障害解析容易化のため、 機械的にレジスタ渡しの引数を解析する機能を 検討した。 Investigation of function argument analysis in a kernel memory dump. † Information Technology R&D Center, Mitsubishi Electric Corporation.. 1-21. (1)スタック渡し引数の場合. (2)レジスタ渡し引数の場合. 図 1 メモリダンプにおける引数格納場所 3. 引数解析機能の方式案 引数解析機能の検討にあたり、(1)レジスタ値 を書き出す方式、(2)命令コードをたどる方式、 (3)デバッグ情報を用いる方式の 3 通りの方式案 を挙げる。 (1)レジスタ値を書き出す方式 レジスタ渡し引数の場合、引数を格納したレ ジスタの内容が、関数内の処理により上書きさ れる可能性がある。これに対応するため、平常 時に関数が呼ばれるたびに引数の値を書き出し ておき、障害発生時にその値を取得する方式が 考えられる。 例えば、レジスタ値をスタックに書き出すこ とで障害解析に利用する際の流れを図 2-(1)に示 す。平常時において、関数が呼び出された際、 引数格納レジスタ R に格納されて渡された引数を、 スタック内の所定の位置に書き出す。スタック の内容は障害発生時にメモリダンプに書き出さ れるため、障害解析時にはこのスタックを参照 して引数を取得する。 (2)命令コードをたどる方式 実行ファイルからカーネルモジュールの命令 コードを取得することが可能である。これを活 用し、命令コードをたどり、関数呼出時に渡さ. Copyright 2019 Information Processing Society of Japan. All Rights Reserved..

(2) 情報処理学会第 81 回全国大会. 表 1 ケースごとの引数解析の比較 格納先. 分岐. なし レジスタ. なし あり. スタック. なし あり. (1)レジスタ値を書き出す方式. 格納 タイミング 分岐以前 分岐以降 分岐以前 分岐以降. 方式 (2) × 〇 × × 〇 〇 ×. 方式 (3) × 〇 〇 〇 〇 〇 〇. えず、より多くの引数を解析可能である方式を 採用する。 方式(1)は関数が呼ばれるごとに書き出し処理 を行うため、オーバーヘッドを発生させる。方 式(2)と(3)は平常時の処理に影響を与えないた め、条件を満たす。 次に、前述の条件を満たした 2 通りの方式の内、 どちらがより多くの引数を解析可能であるか比 較した。格納先、分岐命令の有無、分岐命令が ある場合の格納命令の実行タイミングによりケ ース分けし、解析可能か否かをまとめた結果を 表 1 に示す。最適化された関数において、引数を その後の処理で使わない場合に、どこにも格納 しないまま上書きすることがある。このように、 引数がどこにも格納されていないケースは両方 式共に解析不可能である。それ以外のケース、 すなわちレジスタもしくはスタックに値が格納 されている場合は、方式(3)では全て解析可能で ある。一方、方式(2)は、分岐命令がないケース と、分岐命令以前にスタックに格納されたケー ス以外は解析不可能である。これは、分岐命令 以降に実行された命令が不明であるためである。 なお、全ての引数が関数開始時にスタックに退 避されている場合は、方式(2)も有効であると言 える。しかし、最適化された関数は、関数開始 時の引数退避処理を行わない。よって、方式(3) がより多くのケースにおいて引数を解析可能で あると言える。 5 結論 本稿では、OS メモリダンプにおいて、レジス タ渡しの引数を機械的に解析するための方式を 検討した。今後は、デバッグ情報を用いる引数 解析機能の実現性を検証する。 参考文献. (2) 命令コードをたどる方式. (3) デバッグ情報を用いる方式. 図 2 各方式案の概要. れた引数が障害発生時のレジスタやスタックの どこに格納されているのかを調べ、引数を解析 する方式が考えられる。 具体的には、図 2-(2)のように、命令コードか ら、引数格納レジスタ R の内容がアドレス A に格 納されたことを確認し、障害発生時の A に格納さ れている値を取得する。 なお、命令コードに分岐が含まれている場合 は、どちらの分岐先が実行されたか不明である ため、引数を解析できない場合がある。すなわ ち、引数の移動や、移動先レジスタの上書きが 実行されたか不明である場合は引数を解析でき ない。 (3) デバッグ情報を用いる方式 デバッグ情報とは、ソースコードと命令コー ドの対応を記したものである。GDB[2]では、デ バッグ情報で引数の格納場所を調べ、アプリケ ーションの障害解析を行う。OS のメモリダンプ においても、関数呼出時に渡された引数の障害 発生時における格納場所をデバッグ情報から調 べ、その値を取得する方法が考えられる。 具体的には、図 2-(3)のように、デバッグ情報 で引数の格納場所がアドレス A であることを確認 [1] Red Hat Software, Inc. “White Paper: Red Hat し、障害発生時の A の内容を取得する。 Crash Utility,” <https://people.redhat.com/ anderson/> 2018-12-13 アクセス. 4 各方式の比較検討 前述の 3 通りの方式について比較検討を行った。 [2] Free Software Foundation, Inc. “GDB: The GNU Project Debugger,” <https://www.gnu. 本稿では、平常時の処理にオーバーヘッドを与 org/software/gdb/> 2018-12-13 アクセス.. 1-22. Copyright 2019 Information Processing Society of Japan. All Rights Reserved..

(3)

参照

関連したドキュメント

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

FSIS が実施する HACCP の検証には、基本的検証と HACCP 運用に関する検証から構 成されている。基本的検証では、危害分析などの

分配関数に関する古典統計力学の近似 注: ややまどろっこしいが、基本的な考え方は、q-p 空間において、 ①エネルギー En を取る量子状態

しかし , 特性関数 を使った証明には複素解析や Fourier 解析の知識が多少必要となってくるため , ここではより初等的な道 具のみで証明を実行できる Stein の方法

生活のしづらさを抱えている方に対し、 それ らを解決するために活用する各種の 制度・施 設・機関・設備・資金・物質・

新設される危険物の規制に関する規則第 39 条の 3 の 2 には「ガソリンを販売するために容器に詰め 替えること」が規定されています。しかし、令和元年

電子式の検知機を用い て、配管等から漏れるフ ロンを検知する方法。検 知機の精度によるが、他

討することに意義があると思われる︒ 具体的措置を考えておく必要があると思う︒