CL

15. CLPソースの復元

一般にオブジェクトは DSPOBJD「8=保守属性の表示」によって原始ファイルとしてどのようなソースから生成されたのかを知ることができる。(CRTDUPOBJなどによって複製されたオブジェクトは生成元のソースの記述は無い)

そこで SEU によってソースを取得することができるが、ソースが手元に無いような場合で CLP *PGM の場合はRTVCLSRC によってソースを復元することができる。

良く知られている例では

RTVCLSRC PGM(QSYS/QSTRUP) SRCFILE(QGPL/QCLSRC)

によって OS/400 のスタート・アップCLP のソースを復元することができる。

但し CRTCLPGM によって RTVSLSRC(*NO) としてコンパイルされた CLP のソースは復元することができない。

および CRTBNDCL などによるILEコンパイルされたものも復元できない。

読者としては RPGのデコンンパイラー、すなわち逆アセンブラのようにRPGオブジェクトから RPGソースを復元できるかどうかを知りたいであろう。

これは原理的には可能である。

RPGオブジェクトは実は MI(マシン・インターフェース)API の組み合わせであり、あるRPG命令はいくつかの MIの組み合わせに分解される。

どのようなMI-APIが使用されるかもある程度コンパイル・リストにも示されている。

面倒な作業であるがこれを丹念に進めていけばRPGソースを引き出せることになる。

MI の詳細は V2までは公開されていたが今では日本語の資料も無い。

また、RPGのデコンパイラの作成は労多く益も少なく、何より技術に携わる者としての

モラルを問われかねないし、暗黙のタブーでもある。