一、常用工具与命令
(一)file 命令
作用:检查文件类型的强大工具,不依赖文件扩展名,而是基于文件内容识别。
检查原理:
- ASCII 编码的文本文件:识别特定的字符串特征。
- 非 ASCII 编码的二进制文件:识别幻数(Magic Numbers)和特殊结构。
什么是幻数? 文件格式要求的特殊标签值,通常位于文件头部。
- MS-DOS 可执行文件:
MZ(Mark Zbikowski, MS-DOS 架构设计师姓名缩写)- Java Class 文件:
0xcafebabe(便于记忆的十六进制值)- Windows PE 可执行文件:
4D5A(即 ASCII 的 'MZ')- JPG 图片文件:
FFD8...结尾通常包含4A464946(ASCII 的 'JFIF')幻数定义文件位置:
/usr/share/file/magic、/usr/share/misc/magic、/etc/magic
(二)strip 命令
作用:剥离二进制文件中的符号表(Symbol Table)和调试信息。
- 影响:会导致无法进行源码级调试。
- 优势:显著减小文件体积,常用于发布版本。
(三)nm 命令
作用:列出目标文件(如 ELF 可执行文件、.o 中间文件)中的符号表。
符号字母说明:
- 大小写含义:大写字母表示全局符号,小写字母表示局部符号。
- 常见符号类型:
U(Undefined):未定义的符号,通常引用自外部库或其他文件。T/t(Text):代码段定义的符号。T为全局函数,t为静态函数(本地)。D/d(Data):已初始化的数据段。D为全局变量,d为局部静态变量。C(Common):未初始化的数据(通常在全局区)。B/b(BSS):未初始化的数据段。
(四)查看动态库依赖
不同平台下查看可执行文件所需动态链接库的命令:
| 平台 | 工具/命令 | 使用示例 | 备注 |
|---|---|---|---|
| Linux | ldd |


