ロードモジュールの修正(IMASPZAP)

By 神居 - Posted: 2008/10/28 Last updated: 2009/11/16 - Leave a Comment

SPZAPはロードモジュールやデータセットの内容をDASD上で直接修正するためのユーティリティです。ロードモジュールに関してはアセンブラー言語で作ったプログラムのソースプログラム修正が行えないような場合に利用されます。例えばISVなど商用のパッケージソフトを提供しているソフトウェア・メーカーにおいて出荷済み製品の障害修正や機能変更を行う場合に使われます。一般のユーザーでは自らのアプリケーション・プログラムの修正に利用することはまずありませんが、ISV製品などを利用している場合、提供元の依頼でSPZAPを使用した作業を行うこともあります。修正データを作ることはなくても、ユーティリティ自体の使い方は覚えておくといいでしょう。

ロードモジュールの修正

プログラム名はMSPではJQPSPZAP、VOS3ではJSPPTCHですがいずれもIMASPZAPの別名が付いています。ただし制御文には一部非互換もあるから必要に応じてマニュアルを参照してください。ここで紹介した機能に関しては同じです
SYSLIB DD文で修正するロードモジュールが格納されている区分データセットを指定します。
SYSIN DD文で実際に修正作業を行うための制御文を指定します。NAME文で修正するロードモジュールのメンバー名とCSECT名を、VER文で現在のモジュール内容を修正箇所のCSECT先頭からのオフセット値、現在のデータの組み合わせを、REP文で修正後のデータを、オフセット値、更新後データの組み合わせで記述します。VERとREPはペアーである必要はありません。VERのみを羅列した後にREPをまとめて書いてもかまいません。IDRDATAはモジュールに修正履歴を残す場合に使用します。なくても修正はなされます。IDRDATAを使用する場合、ロードモジュール内のIDRレコードに空きエントリーがないとIDRDATAは書き込みできません。この場合SPZAPはVERデータがすべて合っていてもCC=8で終了します。JCL例のようにIGNIDRFULLパラメーターを指定すればIDRDATAは無視されモジュール内容は修正されます。この場合CC=4となります。VOS3ではIGNIDRFULLパラメーターはなく、常にIGNIDRFULLパラメーターが指定されたのと同じ動作になります。

パッケージソフトのプログラム修正などではSPZAPの制御文は提供元ベンダーから示されるのが普通です。OS自身のモジュールはよほどの緊急事態でない限りSPZAPで修正されることはまずありません。SMP/Eと言うシステム保守機能によって行われます。


データセット・ブロックの直接修正

SYSLIB DD文で修正するデータセットを指定します。SYSIN DD文で実際に修正作業を行うための制御文を指定します。
ABSDUMPとABSDUMPTはデータセットの物理レコード内容を印刷します。レコードと言ってもDASD上の物理レコードですからプログラムから見ればブロックになります。データは16進ダンプの形式で出力されます。
データセットの場合はNAMEではなくCCHHR文で修正ブロック(物理レコード)の位置を示します。位置はシリンダ番号+トラック番号+レコード番号を16進数で繋げたDASDの先頭からの絶対トラックアドレスです。実際の値はABSDUMP(T)の出力で知ることができます。VERとREPはロードモジュール同様にデータ修正する位置と更新後の内容です。位置はブロックの先頭からのオフセット値です。通常はISPFエディターのHEXエディットモードなどでもバイナリーデータの修正ができますから、今ではSPZAPで直接修正するようなことはまず無いでしょう。

Posted in ありがたいサンプルJCL • • Top Of Page