IBM i:两个 *PGM 对象之间的二进制差异

时间:2021-01-22 09:09:20

标签: ibm-midrange

操作系统:IBM i (AS/400)

我想检查两个 ILE *PGM(或 *SRVPGM)对象的可执行代码是否相同。不能使用包含的源更改日期,因为时间戳可以更改但代码是相同的。这是从 git 存储库下载源代码的情况,因此可以更改源更改日期。

示例: 您有一个包含所有已编译程序对象的库 A。然后将完整的源代码从 git 下载到 AS/400 并编译到另一个库 B。 现在您要检查库 A 和库 B 之间哪些程序对象确实发生了变化。只有更改的程序对象才应保存并传输到目标系统。

要比较的对象都是在同一个系统和同一个目标版本上编译的。

我没有找到用于比较二进制代码的 API。我可以使用 MI 来获取这些信息吗?

有人遇到过同样的问题吗?

最好的问候, 马蒂亚斯

2 个答案:

答案 0 :(得分:3)

如果 *PGM 恰好是用 DBGVIEW(*LIST) 或 DBGVIEW(*ALL) 编译的

您应该能够使用调试 API 从对象中提取编译列表。

否则,Dump Object 命令可用于生成对象内容的假脱机文件。然后您可以比较假脱机文件。显然,它们不会是完美匹配,例如库名称和创建日期会有所不同。我还怀疑,如果编译对象是在不同级别的操作系统(版本甚至 PTF)上编译的,则编译对象会有所不同。

答案 1 :(得分:3)

比较编译列表可能更容易。

对于 ILE RPG 编译器,几乎完全同时编译的两个程序之间总是至少存在一个差异。编译器的日期和时间生成到一个内部结构中。

我不知道是否有任何其他编译器会导致两个程序在从相同的源、系统、ptf 级别等编译时进行不同的比较。