Loading...
Loading...
Compare original and translation side by side
undefined referenceundefined referencefilesizefilesizefile prog # type, arch, linkage, stripped or not
size prog # section sizes: text, data, bss
size --format=sysv prog # detailed per-section breakdownfile prog # 查看文件类型、架构、链接方式、是否已剥离符号
size prog # 查看段大小:text、data、bss
size --format=sysv prog # 按段详细分解大小lddlddldd ./prog # show all shared lib dependencies
ldd -v ./prog # verbose: include symbol versionsldd ./prog # 显示所有共享库依赖
ldd -v ./prog # 详细模式:包含符号版本信息
If `ldd` shows `not found`, the shared library is missing from `LD_LIBRARY_PATH` or `/etc/ld.so.conf`.
Fix:
```bash
export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH
如果`ldd`显示`not found`,说明该共享库不在`LD_LIBRARY_PATH`或`/etc/ld.so.conf`配置的路径中。
修复方法:
```bash
export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATHundefinedundefinednmnmnm prog # all symbols (T=text, D=data, U=undefined, etc.)
nm -D ./libfoo.so # dynamic symbols only
nm -C prog # demangle C++ symbols
nm --defined-only prog # only defined symbols
nm -u prog # only undefined (needed) symbols
nm -S prog # include symbol sizenm prog # 显示所有符号(T=代码段、D=已初始化数据段、U=未定义等)
nm -D ./libfoo.so # 仅显示动态符号
nm -C prog # 还原C++符号名称
nm --defined-only prog # 仅显示已定义符号
nm -u prog # 仅显示未定义(需要外部提供的)符号
nm -S prog # 包含符号大小
Symbol type codes:
- `T` / `t` — text (code): global / local
- `D` / `d` — data (initialised): global / local
- `B` / `b` — BSS (uninitialised): global / local
- `R` / `r` — read-only data: global / local
- `U` — undefined (needs to be provided at link time)
- `W` / `w` — weak symbol
符号类型代码说明:
- `T` / `t` — 代码段:全局/局部
- `D` / `d` — 已初始化数据段:全局/局部
- `B` / `b` — 未初始化数据段(BSS):全局/局部
- `R` / `r` — 只读数据段:全局/局部
- `U` — 未定义(链接时需要外部提供)
- `W` / `w` — 弱符号readelfreadelfreadelf -h prog # ELF header (arch, type, entry point)
readelf -S prog # all sections
readelf -l prog # program headers (segments)
readelf -d prog # dynamic section (like ldd but raw)
readelf -s prog # symbol table
readelf -r prog # relocations
readelf -n prog # notes (build ID, ABI tag)
readelf --debug-dump=info prog | head -100 # DWARF info
readelf -a prog # all of the abovereadelf -h prog # ELF头信息(架构、类型、入口点)
readelf -S prog # 显示所有段
readelf -l prog # 程序头(段加载信息)
readelf -d prog # 动态段信息(类似ldd但为原始数据)
readelf -s prog # 符号表
readelf -r prog # 重定位信息
readelf -n prog # 注释信息(Build ID、ABI标签)
readelf --debug-dump=info prog | head -100 # DWARF调试信息
readelf -a prog # 显示以上所有信息objdumpobjdumpundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefineddebuginfodreadelf -n prog | grep 'Build ID'debuginfodreadelf -n prog | grep 'Build ID'undefinedundefinedundefinedundefined
**"binary is too large"**
```bash
size --format=sysv prog | sort -k2 -nr | head
nm -S --defined-only prog | sort -k2 -nr | head -20
objdump -d prog | awk '/^[0-9a-f]+ </{fn=$2} /^[0-9a-f]/{count[fn]++} END{for(f in count) print count[f], f}' | sort -nr | head -20
**“二进制文件过大”**
```bash
size --format=sysv prog | sort -k2 -nr | head
nm -S --defined-only prog | sort -k2 -nr | head -20
objdump -d prog | awk '/^[0-9a-f]+ </{fn=$2} /^[0-9a-f]/{count[fn]++} END{for(f in count) print count[f], f}' | sort -nr | head -20skills/binaries/linkers-ltoskills/binaries/binutilsarstripobjcopyaddr2lineskills/debuggers/core-dumpsskills/binaries/linkers-ltoarstripobjcopyaddr2lineskills/binaries/binutilsskills/debuggers/core-dumps