Windows 有一个漂亮的工具 - Dependency Walker - 它列出了可执行文件中使用的所有符号以及加载它们的动态库。这对于了解丢失的符号和 DLL 非常有用。
*nix/Solaris 是否有类似的实用程序。虽然我们可以通过 ldd 和 nm 的组合来发现这一点,但一个工具会很方便。
Windows 有一个漂亮的工具 - Dependency Walker - 它列出了可执行文件中使用的所有符号以及加载它们的动态库。这对于了解丢失的符号和 DLL 非常有用。
*nix/Solaris 是否有类似的实用程序。虽然我们可以通过 ldd 和 nm 的组合来发现这一点,但一个工具会很方便。
使用 dbx 附加到 pid 并使用funcs命令列出加载的符号。
$ dbx "-c funcs; quit " /usr/bin/bash 4837
Reading bash
Reading ld.so.1
Reading libcurses.so.1
Reading libsocket.so.1
Reading libnsl.so.1
Reading libdl.so.1
Reading libc.so.1
Attached to process 4837
stopped in _waitid at 0xfee0af95
0xfee0af95: _waitid+0x0015: jae _waitid+0x21 [ 0xfee0afa1, .+0xc ]
`bash`_start
`bash`_mcount
`bash`__fsr
`bash`main
`bash`exit_shell
`bash`sh_exit
...
`libnsl.so.1`nis_sperror
`libnsl.so.1`nis_lerror
`libnsl.so.1`__nis_group_cache_stats
...
`libc.so.1`mmap64
`libc.so.1`_mmap64
`libc.so.1`_init
`libc.so.1`_fini
detaching from process 4837