适宜读者:(一年及以上主机经验)
背景知识:(z/OS基础知识, JCL基础知识,binder, 链接器相关知识)
一、AMBLIST的简介
AMBLIST是z/OS下一款分析目标文件和可执行文件结构和内容的工具,功能十分强大。该工具常用来解决以下问题:
1.LISTOBJ - 格式化输出object module(目标文件)的内容信息,
2.LISTLOAD - 输出load module或program object(这两个都是z/OS上的可执行文件)的control sections(CSECTs,控制段),
3.LISTIDR - 输出CSECT中的Identification Record (IDR,包含了程序控制信息和用户提供的描述信息)信息,
4.LISTLPA - 输出link pace areas(LPA)中所选Module的列表,
我们可以通过分析AMBLIST输出的相关信息来诊断并修改相关module中的bug。
二、AMBLIST的使用
用户通常通过编写JCL脚本并向系统提交JOB,来使用AMBLIST分析目标文件或者可执行程序。
一般情况下,运行AMBLIST的最小内存是64KB,调用LISTLPA控制语句,则需要100KB。然而,对于大型load module,IBM建议最少使用200kb内存,对于program object,最少使用12M内存。
1. AMBLIST的相关JCL statements
(1)JOB
用于初始化job
(2)EXEC PGM=AMBLIST
调用AMBLIST过程
(3)SYSPRINT DD
定义消息数据集
(4)Anyname DD
定义输入数据集。这条语句也可以定义一个z/OS Unix 文件,一旦定义了一个该类型的文件,必须同时指定它的完整路径和文件名。如果定义一个z/OS Unix系统服务中的object module,必须指定PATHOPTS=(ORDONLY)。这条语句不能同时指定义多个数据集。
(5)SYSIN DD
定义输入流数据集,通常用于指定AMBLIST的控制语句。
2.AMBLIST的控制语句(control statements)
AMBLIST的控制语句有四条,分别是LISTOBJ,LISTLOAD,LISTIDR,LISTLPA。此处我们仅简要介绍一下LISTOBJ和LISTLOAD,其余详细内容请参考MVS Diagnosis:Tools and Service Aids的第十五章。
(1)LISTOBJ
LISTOBJ的常用参数有
a. [,TITLE=(’title’,position)]
指定title,并且指定它的缩进开始位置
b.[,DDN=ddname]
指定输入module,一旦该参数被忽略,默认输入module的名称是SYSLIB
c.[,MEMBER={member|(member 1, member n...)}]
指定输入数据集的member,可以指定多个member。
(2)LISTLOAD
LISTLOAD的常用参数有
a. [,TITLE=(’title’,position)]
用法同LISTOBJ
b.[,DDN=ddname]
用法同LISTOBJ
c.[,MEMBER={member|(member 1, member n...)}]
用法同LISTOBJ
d.[OUTPUT={MODLIST|XREF|BOTH|MAP}]
指定输出信息以何种格式输出
若OUTPUT=MODLIST,则将load module或program object的text和control information格式化输出。
若OUTPUT=XREF,则将load module或program object的module map和cross-reference list格式化输出。
若OUTPUT=BOTH,则将load module或program object的以上两种信息同时格式化输出。
若OUTPUT=MAP,则将load module或program object的numerical map信息格式化输出。
如果该参数被忽略,OUTPUT=BOTH被默认设置。
三、一个AMBLIST例子
以下是一个简单的例子,该JCL编译一个hello world源程序,生成一个目标文件,并导出该目标文件的内容信息;
//AMBLIST1 JOB ('AMBLIST TEST'),
// &SYSUID,NOTIFY=&SYSUID,CLASS=H,
// MSGCLASS=A,MSGLEVEL=(1,1),TIME=(,4),REGION=0M
//*
//ZSCHOLIB JCLLIB ORDER=('SYS1.CBC.SCCNPRC')
//*******************************************************************
//* COMPILE SOURCE FILE
//*******************************************************************
//COMP EXEC EDCC,CPARM='LIST,GOFF'
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSN=&&HELLOOBJ,DISP=(NEW,PASS),
// SPACE=(TRK,(4,1)),UNIT=3390
//COMPILE.SYSIN DD *
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
//******************************************************************
//* AMBLIST OBJ FILE
//******************************************************************
//LISTOBJ EXEC PGM=AMBLIST,REGION=64K
//SYSPRINT DD SYSOUT=*
//OBJ DD DSN=&&HELLOOBJ,DISP=(OLD,PASS)
//SYSIN DD *
LISTOBJ DDN=OBJ,TITLE=('ABMLIST OBJ FILE',25)
四、结果分析
1. Page Header
使用LISTOBJ后,输出结果如下:
图4-01 Page Header
输出结果中,最上边的是Page Header,显示的是当前数据是输出结果的第几页,如图4-01所示,我们给出的是输出结果的第一页。
2. HDR Record
图4-02 HDR record
输出的第一个record是HDR record,它是每个GOFF模块的第一个record。几乎所有GOFF模块的HDR record都是一样的,如图4-02所示。
3. ESD Record
接下来输出的外部符号表记录(ESD Record),如图4-03.
图4-03. ESD Record
我们发现RECORD TYPE一项显示的是ESD,即该记录是外部符号表,该记录描述了在该模块定义或者引用的外部符号。外部符号表中,每条记录表示一个外部符号。图4-03表明,ESD记录都记录了每个外部符号的ID,TYPE,OWNER/PARENT,OFFEST等各项信息以及其他属性,这些信息供链接器使用,链接器通过外部符号解析这一步骤之后,将本模块与其他模块或者库进行链接。
4. TEXT Record
图4-04. TETX Record
图4-04显示的是TEXT记录,TEXT记录包好了属于整个模块的代码和数据TEXT记录是TXT记录类型的一种子集。它们包含了程序的指令和数据。图中的TEXT部分为代码的16进制输出。
5. IDRL Record
IDRL记录显示生成该GOFF模块的language translator的信息。它也是TXT记录类型的一个子集,以结构化数据方式输出。在格式1中,IDRL记录以每行19个字节的方式输出,格式3支持每两行30个字节,包含4数字的年份值和时间戳。如图4-05。
图4-05 IDRL Record
6. RLD Record
图4-06 RLD Record
LISTOBJ导出的另一个重要信息就是RLD记录,即重定位表记录。该记录包含了是模块在链接和加载是需要修改的地址常量和相关数据的区域的信息。当该模块引用其他模块的control sections时,链接器使用重定表去调整所有相关的地址常量。当Program management loader从库中将一个program object 或者load module读入虚拟内存准备执行时,RLD记录同样也被用于调整这些地址常量。
7. END Record
图4-07 END Record
END记录是模块中最后的一个记录。它包好整个模块所含记录的计数,和一个可选的入口点标识。
如图4-07所示,我们的GOFF模块一共包含38个记录,可选入口点的ESDID为000010。
总结
AMBLIST作为一款z/OS下分析目标文件与可执行文件的工具,功能十分强大。用户如果能够熟练掌握AMBLIST的使用方法,能过非常有效的帮助用户调试程序,修改开发过程中遇到的bug。
参考资料:
1. z/OS V1R13.0 MVS Diagnosis: Tools and Service Aids
http://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.ieav100%2Ftoc.htm
2. z/OS V1R13.0 MVS Program Management: User's Guide and Reference
http://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.ieab100%2Ftoc.htm
作者:张瑞琦(实习生)
指导:史达飞
邮箱:shidafATcn.ibm.com(替换AT为@)