如何反汇编IBM i RPG程序或模块以查看编译器添加的循环代码?
查看RPG编译器生成的隐式文件读写底层指令的方法
1. 生成包含隐式代码的编译列表文件
编译RPG程序/模块时,添加以下选项直接生成带隐式展开逻辑的列表:
- 模块编译:
CRTRPGMOD MOD(你的模块名) SRCFILE(源文件库/源文件名) OPTION(*LIST *SHOWCPY) - 绑定程序编译:
CRTBNDRPG PGM(你的程序名) SRCFILE(源文件库/源文件名) OPTION(*LIST *SHOWCPY)
*LIST会生成系统打印文件(SPLF),*SHOWCPY会强制编译器展开所有隐式生成的代码——包括主/副文件循环的读写逻辑、自动生成的文件操作指令,这些内容会直接显示在列表里,能看到编译器补的底层逻辑框架。
查看列表文件:用WRKSPLF命令找到对应的打印文件,或者直接用DSPLSTF FILE(你的SPLF文件名)查看内容。
2. 提取机器级指令(汇编/机器码)
如果要直接看机器指令或汇编助记符,先生成目标模块,再查看目标代码:
- 编译时加上
OPTION(*OBJ *LIST *SOURCE *SHOWCPY)确保生成目标对象和完整列表 - 用以下命令查看模块的机器指令:
这个命令会输出模块里的所有机器指令及对应汇编助记符,包括编译器隐式生成的文件读写、循环控制的底层指令。如果是绑定后的程序,先通过DSPMOD MOD(你的模块名) DETAIL(*CODE)DSPPGM PGM(你的程序名) DETAIL(*MODULE)找到关联模块,再对模块执行上述命令。
3. 汇编级调试查看实时指令
如果想在调试时一步步看隐式指令的执行流程,用汇编模式启动调试:
STRDBG PGM(你的程序名) OPTION(*ASM)
进入调试后,用STEP命令单步执行,就能看到每条机器指令的执行过程,包括编译器为文件循环自动生成的READ、WRITE对应的底层指令,以及循环控制的跳转逻辑。
内容的提问来源于stack exchange,提问作者Kerim Güneş
相关产品推荐
相关产品推荐

