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

C言語SM差分ファイル自動生成による高級言語レベルパッチ作成システム

N/A
N/A
Protected

Academic year: 2021

シェア "C言語SM差分ファイル自動生成による高級言語レベルパッチ作成システム"

Copied!
2
0
0

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

全文

(1)

C言語SM差分ファイル自動生成による

高級言語レベルパッチ作成システム

*

久保田 賢治† 日本電気通信システム株式会社†

はじめに

アプリケーションソフトウェア開発において ソースコードレベルでのパッチファイル生成を 支援するツール『パッチ支援システム』を開発 しました。 本稿では、パッチ支援システムの機能や特徴 について紹介します。

1.パッチ支援システムとは

パッチとは、問題のあったターゲットメモリ の修正を部分的に行うことをいいます。従来、 パッチを実現するためには、修正箇所のメモリ イメージを持ったパッチファイルを生成し、そ れをターゲットにダウンロードすることで実現 していました。しかし、パッチファイルを生成 するためには高級言語の知識だけでなく、アセ ンブリ言語、機械語の知識やターゲットマシン のメモリ構造の把握等、専門的な知識が必要で あることが一般的でした。 本システムでは、パッチファイルを高級言語 (C言語)から自動で生成することができるた め、パッチファイル生成のための専門的な知識 がなくても簡単に生成することが可能です。

2.パッチファイルの生成方法

パッチ支援システムは、大きく分けて 2 つの 機能に分かれます。1 つは、問題のあった修正前 のソースコードとそれを修正したソースコード を入力して差分となる関数や外部変数を差分 OM (パッチ OM)として抽出する「SM 分割」、もう 1 つは、その差分 OM をリンクしてパッチファイ ル(パッチ LM)を生成する「パッチリンカ」で す。 この 2 つの機能を使用してパッチファイルを 生成する一連の流れを図 1 に示します。 図 1. パッチファイル作成イメージ パッチファイルを割り付けるためには、パッチ エリアという専用のエリアを予め用意する必要 があります。

*High-level language level patch making system by C language SM difference file automatic operation generation †Kenji Kubota:NEC Communication Systemes,Ltd.

int a ; func1( ) { a = 10 ; } func2( ) { a = 20 ; } 修正前ソースファイル (旧ソース) int a ; func1( ) { a = 11 ; } func2( ) { a = 20 ; } 修正後ソースファイル (新ソース) 修正 SM 分割 extern int a ; func1( ) { a = 11 ; } パッチリンカ 差分 OM (パッチ OM) 差分ソースファイル (パッチ SM) パッチファイル (パッチ LM) ターゲットマシンへ ダウンロード

1−33

5F-6

情報処理学会第65回全国大会

(2)

3.SM差分ファイル作成

3.1 プリプロセッサ展開

入力された新旧ソースファイルのプリプロセ ッサ展開を行います。

3.2 構文解析

構文解析は、プリプロセッサ展開したソース ファイルを 1 行毎に行います。更に、1 トークン (※)毎に分解し、その中から定義/参照している 全シンボルについて管理を行います。 ※トークンとは、C言語の予約語や演算子、区 切り文字、関数/変数シンボルです。

3.3 差分チェック

構文解析の結果をもとに差分のチェックを行 います。差分の対象単位は 1 関数/1 変数です。

3.4 パッチSMの作成

差分が発生した関数/変数毎のパッチSMを作 成します。また、インクルードしているヘッダ ファイル中で定義している関数/変数に差分があ る場合もパッチソースファイルの作成を行いま す。 尚、作成したパッチソースファイルのマクロ 定義等は全て展開済みとします。

3.5 最適化対応

ソースファイルで差分が発生してもコンパ イラの最適化によりそれぞれのパッチ OM の raw データに差分がない場合は、パッチSMの作成 は行いません。

4.いろいろなパッチファイル

通常のパッチファイルは、修正(変更)のあ った関数や外部変数、あるいは新規追加になっ た関数や外部変数なのですが、パッチリンカは それ以外にもいろいろなパッチファイルを生成 します。

4.1 ジャンプパッチ LM

修正後の関数が修正前の関数より大きくなっ た場合、修正後の関数をパッチエリアに割り付 け、修正前の関数が割り付いている箇所にはジ ャンプコードを割り付けます。ジャンプコード のジャンプ先は修正後の関数の先頭アドレスと なります。 このジャンプコードのパッチファイルを「ジ ャンプパッチ LM」と呼びます。 図 2 ジャンプパッチ LM イメージ

4.2 ライブラリパッチ LM

パッチファイルは既存のシステムコールを呼 び出すことができるだけでなく、新たな(今ま でに呼び出していない)システムコール(また はライブラリ関数)を呼び出すことも可能です。 パッチリンクの際に、新たなシステムコールが 入ったライブラリ・アーカイブファイルを指定 することで、そのシステムコールのみが組み込 まれたパッチファイル「ライブラリパッチ LM」 を生成します。

5.問題点

本システムでは前述の通り、関数に対するパ ッチファイルについてはいろいろな種類があり、 実現不可能なパッチファイルは特にありません。 しかし、外部変数に対するパッチについてはい くつかの問題点が残ります。 特に大きな問題が、変数サイズが大きくなる 変数へのパッチファイル生成ができないことで す。クロスリファレンス機能を設けることで実 現は可能ですが、回避案があることと、必要性 と改造規模の兼ね合いからこの機能は現在実装 していません。 修 割 り 付 け エ リ ア 正 前 関 数 パッチ LM (修正後関数) パ ッ チ エ リ ア ジャンプパッチ LM ターゲットメモリ パ ッ チ フ ァ イ ル

1−34

参照

関連したドキュメント

儀礼の「型」については、古来から拠り所、手本とされてきた『儀礼」、『礼記』があり、さらに朱喜

この 文書 はコンピューターによって 英語 から 自動的 に 翻訳 されているため、 言語 が 不明瞭 になる 可能性 があります。.. このドキュメントは、 元 のドキュメントに 比 べて

語基の種類、標準語語幹 a語幹 o語幹 u語幹 si語幹 独立語基(基本形,推量形1) ex ・1 ▼▲ ・1 ▽△

2021] .さらに対応するプログラミング言語も作

しかし,物質報酬群と言語報酬群に分けてみると,言語報酬群については,言語報酬を与

ダウンロードしたファイルを 解凍して自動作成ツール (StartPro2018.exe) を起動します。.

Guasti, Maria Teresa, and Luigi Rizzi (1996) "Null aux and the acquisition of residual V2," In Proceedings of the 20th annual Boston University Conference on Language

今回の調査に限って言うと、日本手話、手話言語学基礎・専門、手話言語条例、手話 通訳士 養成プ ログ ラム 、合理 的配慮 とし ての 手話通 訳、こ れら