nm使用

1
2
3
nm /opt/homebrew/opt/qt/lib/QtSvg.framework/QtSvg -UCg | grep QSvgRenderer
nm /opt/homebrew/opt/qt/lib/QtSvg.framework/QtSvg -UCgj | grep QSvgRenderer
nm /opt/homebrew/opt/qt/lib/QtSvg.framework/QtSvg -uCg

-U 已定义符号 导出
-u 未定义符号 导入
-C C++符号名称解析
-g 全局符号
nm/llvm-nm 不接受MSVC格式 接受MinGW格式

llvm-objdump/llvm-undname

1
2
3
4
dumpbin /exports Qt5Svg.dll > exports.txt
undname exports.txt > exports_demangle.txt
dumpbin /imports Qt5Svg.dll > imports.txt
undname imports.txt > imports_demangle.txt

llvm-undname不能对文件使用

llvm-undname/llvm-cxxfilt可跨平台使用

1
2
3
4
llvm-undname ?save@QPainter@@QEAAXXZ
# public: void __cdecl QPainter::save(void)
llvm-cxxfilt __ZN12QSvgRenderer10setViewBoxERK5QRect
# QSvgRenderer::setViewBox(QRect const&)

动态库依赖分析

linux 

1
2
# ldd/readelf
readelf --dynamic /usr/bin/bash | grep NEEDED

macOS 

1
otool -L

windows 

1
2
dumpbin /dependents
# ldd (mingw)

linux

1
objdump -p /path/to/program | grep NEEDED

macOS

1
objdump -p program | grep LC_LOAD_DYLIB -A2 | grep name | awk '{print $2}' | sort -r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
objdump -a mach
objdump -p mach
objdump -s --section=.qt.cert mach
objdump -sj .qt.cert mach
objdump -dj __text mach
objdump -h mach
objdump -sj __cstring mach
objdump -t mach
objdump -t --demangle mach/objdump -tC mach

# -x, --all-headers
# Display all available header information. Equivalent to specifying
# --archive-headers, --file-headers, --private-headers, --reloc,
# --section-headers, and --syms

misc

msvcfilt