我在 Cobol 程序中使用 CICS,我注意到有时数据会从 CICS 内存中写入。它会导致数据损坏并且我的应用程序停止。我不知道它附加在哪里,所以我正在创建一个解析器来分析我的 Cobol 代码,以查找 CICS 使用的 COMMAREA 中可能存在的损坏。现在我检查了以下陈述:
EXEC CICS XCTL
EXEC CICS LINK
EXEC CICS RETURN TRANSID
对于每个,我检查发送长度(在LENGTH
参数中声明)是否不大于发送COMMAREA
。然后我检查DFHCOMMAREA
接收程序中是否不大于发送COMMAREA
(根据此文档http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=%2Fcom.ibm.cics。 ts31.doc%2Fdfhp3%2Fdfhp37t.htm):
接收数据区不必与原始通信区长度相同;如果只需要访问数据的第一部分,则新数据区可以更短。但是,它不能长于通过的通信区域的长度。如果是这样,您的事务可能会无意中尝试读取已传递区域之外的数据。它还可能覆盖该区域之外的数据,这可能导致 CICS 异常终止。
现在,我想知道为了检测内存覆盖,我应该解析哪些其他内容?