/proc/<pid>/maps will show you where the executable and shared libraries are
loaded. You can use the nm command to display the offsets within the shared
library and executable for each of the entry points and then do the
relocation to work out where in storage the entry points are. (However, if
the object has been stripped, you may not find any symbols.) Once you have
the desired address you can use the #CP TR command and use those virtual
addresses as CP will catch them for you too.

resc004:/usr/src/linux # cat /proc/self/maps
00400000-00404000 r-xp 00000000 5e:05 32821      /bin/cat
00404000-00405000 rw-p 00003000 5e:05 32821      /bin/cat
00405000-00408000 rwxp 00000000 00:00 0
40000000-40013000 r-xp 00000000 5e:05 227151     /lib/ld-2.2.5.so
40013000-40015000 rw-p 00012000 5e:05 227151     /lib/ld-2.2.5.so
40023000-4013f000 r-xp 00000000 5e:05 227152     /lib/libc.so.6
4013f000-40145000 rw-p 0011b000 5e:05 227152     /lib/libc.so.6
40145000-40148000 rw-p 00000000 00:00 0
40148000-40173000 r--p 00000000 5e:05 128512
/usr/lib/locale/en_US/LC_CTYPE
7fffa000-80000000 rwxp ffffb000 00:00 0

In the above case you are interested the storage described by 'r-xp': this
is the r/o code.

resc004:/usr/src/linux # nm /lib/libc.so.6 | grep -v "\.L" | grep -v
"L[0-9]" | more
00000000 A GCC_3.0
00000000 A GLIBC_2.0
00000000 A GLIBC_2.1
00000000 A GLIBC_2.1.1
00000000 A GLIBC_2.1.2
00000000 A GLIBC_2.1.3
00000000 A GLIBC_2.2
00000000 A GLIBC_2.2.1
00000000 A GLIBC_2.2.2
00000000 A GLIBC_2.2.3
00000000 A GLIBC_2.2.4
00000000 A GLIBC_2.2.5
0011c9a4 d LogFacility
0011c9a0 d LogFile
0011c9a8 d LogMask
00122988 b LogStat
0012298c b LogTag
0011c99c d LogType
00115ff4 r OPSYS
001229a8 b SyslogAddr
00120488 a _DYNAMIC
000a3fc0 W _Exit
00120574 a _GLOBAL_OFFSET_TABLE_
0011ddb8 D _IO_2_1_stderr_
0011daf8 D _IO_2_1_stdin_
0011dc58 D _IO_2_1_stdout_
00074254 T _IO_adjust_column
0006bc60 T _IO_adjust_wcolumn
000760b4 t _IO_check_libio

-----Original Message-----
We recently encountered an application loop with a Linux Websphere instance.
I was able to get a VM PER Branch trace, but I cannot find any command
within Linux to display those memory locations or to determine where modules
are actually loaded. The code does not have any 'eyecatchers' either, so
doing VM displays with translate are not helpful either. I'm having trouble
determining what modules are being executed.

Reply via email to