IBM i / AS400 解析・リバース — 最良の手順と手法(匿名化公開用)
最低限、次のオブジェクトタイプを収集する。
*PGM プログラム
*SRVPGM サービスプログラム
*MODULE モジュール
*FILE PF、LF、DSPF、PRTF、SAVF等
*DTAARA データエリア
*DTAQ データキュー
*MSGF メッセージファイル
*CMD コマンド
*JOBD ジョブ記述
*JOBQ ジョブ待ち行列
*OUTQ 出力待ち行列
*SBSD サブシステム記述
*BNDDIR バインディング・ディレクトリー
*USRSPC ユーザースペース
*USRQ ユーザー待ち行列
*JRN ジャーナル
*JRNRCV ジャーナルレシーバー
*SQLPKG SQLパッケージ
システム名
ライブラリー名
オブジェクト名
オブジェクトタイプ
拡張属性
所有者
作成日時
最終変更日時
最終使用日時
使用日数カウント
サイズ
ASP
監査属性
権限
ソース情報
コンパイラー情報
リリース情報
オブジェクト説明
SELECT *
FROM TABLE(
QSYS2.OBJECT_STATISTICS(
OBJECT_SCHEMA => 'APPLIB',
OBJTYPELIST => '*ALL'
)
);
複数ライブラリーを対象にするときは、ライブラリーごとに取得し、結果へSYSTEM_NAMEとEXTRACTED_ATを追加する。
DSPOBJD OBJ(APPLIB/*ALL) OBJTYPE(*ALL)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/OBJD)
*PGM、*SRVPGM、*MODULE、*FILEを優先して分類する。RPG
RPGLE
SQLRPGLE
CLP
CLLE
SQLCL
CBL
CBLLE
SQLCBLLE
PF
LF
DSPF
PRTF
ICFF
BND
CMD
MENU
TXT
COPY
拡張子やソースタイプが誤っている資産もあるため、本文による判定も行う。
| 項目 | 内容 |
|---|---|
| ソースライブラリー | 例:DEVLIB |
| ソース物理ファイル | 例:QRPGLESRC |
| メンバー名 | 例:ORD001 |
| ソースタイプ | RPGLE等 |
| メンバー説明 | 業務説明 |
| 作成日時 | 初回作成 |
| 最終変更日時 | 最新変更 |
| CCSID | ソース文字コード |
| レコード長 | 固定形式RPGでは重要 |
| 行番号 | ソース順序番号 |
| 行変更日 | 変更履歴の補助 |
| 抽出日時 | 取得時点 |
| ハッシュ値 | 同一性確認 |
IBM i Access Client Solutions、FTP/SFTP、IFSへのコピー、SQL Services、RDi等を利用できる。
ソースをストリームファイル化する場合は、次を保持する。
元ライブラリー
元ソース物理ファイル
元メンバー
元CCSID
変換後CCSID
改行コード
抽出コマンド
抽出日時
SHA-256
/COPY・/INCLUDEの収集RPGソース本文から次を抽出する。
/COPY
/INCLUDE
COPYRIGHT等と誤認しないための構文位置
相対パス
ライブラリー修飾
ソースファイル修飾
条件コンパイル
/IF
/ELSEIF
/ELSE
/ENDIF
/DEFINE
/UNDEFINE
INCDIR、RPGPPOPT、DEFINEを確認する。次の根拠を組み合わせる。
DSPPGMDSPPGMREFPROGRAM_INFOBOUND_MODULE_INFOソースがない場合は、処理内容を「確定」とせず、根拠ごとに信頼度を記録する。
同じソースでも、コンパイルパラメーターによって動作や参照先が変わる。
CRTBNDRPG
CRTRPGMOD
CRTPGM
UPDPGM
CRTSRVPGM
UPDSRVPGM
CRTSQLRPGI
主な確認項目:
SRCFILE
SRCMBR
TGTRLS
DBGVIEW
OPTION
OUTPUT
GENLVL
REPLACE
DFTACTGRP
ACTGRP
BNDDIR
BNDSRVPGM
COMMIT
CLOSQLCSR
DATFMT
TIMFMT
LANGID
SRTSEQ
CCSID
ALWNULL
DEFINE
RPGPPOPT
INCDIR
DFTRDBCOL
USRPRF
AUT
STGMDL
TERASPACE
コンパイル時に可能ならクロスリファレンスを出力する。
CRTBNDRPG PGM(APPLIB/ORD001)
SRCFILE(SRCLIB/QRPGLESRC)
SRCMBR(ORD001)
OPTION(*XREF)
OUTPUT(*PRINT)
本番資産を再コンパイルして情報取得するのではなく、既存スプールまたは開発環境で再現する。再コンパイルによってオブジェクトを置換しないこと。