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のデコンパイラの作成は労多く益も少なく、何より技術に携わる者としての
モラルを問われかねないし、暗黙のタブーでもある。