Running AMBLIST on HFS programs
Here is JCL that can be used to run AMBLIST on an executable program in the HFS:
//S1 EXEC PGM=AMBLIST,REGION=80M,TIME=5
//SYSPRINT DD SYSOUT=*
//HFS DD PATH='path',PATHOPTS=(ORDONLY)
//SYSIN DD *
LISTLOAD DDN=HFS,OUTPUT=XREF
LISTIDR DDN=HFS
where path is the HFS filename of the executable program.
LISTIDR produces a list of IDR data which includes translator history and date & time
of last link-edit. The LISTLOAD command above produces a cross-reference listing for the
program.
There is also an example of a REXX exec PGMHIST that reports history information
on the Unix System Services and REXX page here. The nm shell command can also be used
to report information about an executable program.
Using dbx to examine HFS executables
dbx can be used to load an executable into memory and examine it. Enter the command
dbx pgm-name. You can enter the help subcommand to get more information.
Enter q to quit. Because AMBLIST & the nm shell command use the binder to retrieve
information from an executable, they do not work when the module has been linked as non-editable
or built at a level not compatible with the current binder level.
Here are some examples of commands that can provide more information about an executable's
structure:
- map
- returns load address, module size and end address.
- listfuncs
- returns information about module external symbols (unless the module is non-editable).
For example,
xxxxx.c: <== original source file
Routine1 <== routine names
Routine2
Routine3
....
Routine10
- &symbol/ length
- displays storage starting from a specified symbol. For example,
&Routine8/ 10 <== display storage
102d7b40: 47f0f028 01c3c5c5 00000198 00008140
102d7b50: 47f0f001 58f0c31c 184e05ef 00000000
102d7b60: 05404140 401e07f4
- listi &symbol
- displays storage and instructions starting from a specified symbol. For example,
listi &Routine8 <== list instructions
0x102d7b40 (Routine8) 47f0f028 b X'28'(,$r15)
0x102d7b44 (Routine8+0x4) 01c3 ???
0x102d7b46 (Routine8+0x6) c5c500000198 ???
0x102d7b4c (Routine8+0xc) 0000 ???
0x102d7b4e (Routine8+0xe) 814047f0 ???
Since you can display the starting locations associated with symbols, it is possible to derive
module mapping information by computing the offsets of symbols from the load address.