dbxでcoreから環境変数を表示する方法
/usr/include/unistd.hに下記の変数があります。
extern char **environ;
このファイルをincludeしてアドレスを確認すると0x2ff22ff4であることが確認できます。(公開情報は見つかりませんでしたが、定数のようです。)
例)
printf("%08x\n", &environ);
**environのため、2回アドレスから値を表示します。
(dbx) 0x2ff22ff4/X
0x2ff22ff4: 30071538
(dbx) 0x30071538/X
0x30071538: 2ff22dc8
環境変数の個数は分からないため、30sや100sで多めに出力し、文字列の領域を確認します。
(dbx) 0x2ff22dc8/30s
0x2ff22dc8: "_=/opt/rsct/bin/rmcd"
0x2ff22ddd: "LANG=Ja_JP"
0x2ff22de8: "LOGIN=root"
0x2ff22df3: "CLCMD_PASSTHRU=1"
0x2ff22e04: "PATH=/opt/rsct/install/bin:/opt/rsct/bin:/usr/bin:/usr/sbin:/bin:/sbin"
0x2ff22e4b: "CORE_NAMING=1"
0x2ff22e59: "LC__FASTMSG=true"
0x2ff22e6a: "LOGNAME=root"
0x2ff22e77: "LOCPATH=/usr/lib/nls/loc"
0x2ff22e90: "USER=root"
0x2ff22e9a: "AUTHSTATE=compat"
0x2ff22eab: "SHELL=/usr/bin/ksh"
0x2ff22ebe: "ODMDIR=/etc/objrepos"
0x2ff22ed3: "HOME=/"
0x2ff22eda: "TERM=dumb"
0x2ff22ee4: "PWD=/"
0x2ff22eea: "TZ=JST-9"
0x2ff22ef3: "NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/%L/%N.cat:/usr/lib/nls/msg/%l.%c/%N:/usr/lib/nls/msg/%l.%c/%N.cat"
0x2ff22f65: ".%c" <== ここから先は環境変数ではない。
0x2ff22f69: ""
0x2ff22f6a: ""
64bitの場合は定数値が0x0fffffffffffffd8になり、/Xの代わりに/llxで表示します。
(dbx) 0x0fffffffffffffd8/llx
0x0fffffffffffffd8: ffffffffffffc80
(dbx) 0xffffffffffffc80/llx
0x0ffffffffffffc80: ffffffffffffd1b
(dbx) 0xffffffffffffd1b/30s
0x0ffffffffffffd1b: "TERM=dumb"
0x0ffffffffffffd25: "AUTHSTATE=compat"
0x0ffffffffffffd36: "SHELL=/usr/bin/ksh"
0x0ffffffffffffd49: "HOME=/"
0x0ffffffffffffd50: "USER=root"
0x0ffffffffffffd5a: "PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java8_64/jre/bin:/usr/java8_64/bin:/ptools/bin"
0x0ffffffffffffdc7: "TZ=JST-9"
0x0ffffffffffffdd0: "LANG=Ja_JP"
0x0ffffffffffffddb: "LOCPATH=/usr/lib/nls/loc"
0x0ffffffffffffdf4: "LC__FASTMSG=true"
0x0ffffffffffffe05: "ODMDIR=/etc/objrepos"
0x0ffffffffffffe1a: "CLCMD_PASSTHRU=1"
0x0ffffffffffffe2b: "CORE_NAMING=1"
0x0ffffffffffffe39: "LOGNAME=root"
0x0ffffffffffffe46: "LOGIN=root"
0x0ffffffffffffe51: "NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/%L/%N.cat:/usr/lib/nls/msg/%l.%c/%N:/usr/lib/nls/msg/%l.%c/%N.cat"
0x0ffffffffffffec3: "/usr/"
余談ですが、argvは環境変数の上にあるため、下記のように少し上から表示することで確認できます。
kshがcoreを吐いた場合にスクリプト名を確認できる場合があります。
(dbx) 0x2ff22dc8-0x80/30s
(略)
0x2ff22d98: "/opt/rsct/bin/rmcd"
0x2ff22dab: "-a"
0x2ff22dae: "IBM.LPCommands"
0x2ff22dbd: "-r"
0x2ff22dc0: "-S"
0x2ff22dc3: "1500"
0x2ff22dc8: "_=/opt/rsct/bin/rmcd"
(略)