> For the complete documentation index, see [llms.txt](https://lightc.gitbook.io/pwn-gitbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lightc.gitbook.io/pwn-gitbook/kpwn/kpwn-setup/nm.md).

# nm

`nm` 是 `Linux` 下查看目标文件、可执行文件、静态库、动态库中符号表的工具。

## 基本用法

查看所有符号

```bash
nm < filename >
```

查看全局符号

```bash
nm -g < filename >
```

查看动态符号表

```bash
nm -D < filename >
```

排序：`-n` 按地址排序，`-S` 按符号大小排序

地址显示：默认十六进制，`d` 十进制，`o` 八进制

```bash
nm -n [ x/d/o ] < filename >
```

`C++` 符号解码：`-C`

## 常用命令

```bash
nm -n vmlinux | grep 'commit_creds$'
```

## 输出格式

```bash
XXXXXXXXXXXXXXXX < Type > < Symbol_name >
```

## Type 类型说明

| 类型        | 说明                                             |
| --------- | ---------------------------------------------- |
| `T` / `t` | `text` 段，大写 `T` 是全局函数，小写 `t` 是局部函数（如 `static`） |
| `D` / `d` | `data` 段，大写 `D` 是全局已初始化数据，反之为局部                |
| `B` / `b` | `bss` 段，大写 `B` 是全局未初始化数据，反之为局部                 |
| `R` / `r` | `rodata` 段，同上全局和局部的区别                          |
| `U`       | 未定义符号，通常是链接外部库                                 |
| `W` / `w` | 弱符号                                            |
| `A`       | 绝对符号                                           |
| `V` / `v` | 弱对象符号                                          |
| `?`       | 未知符号类型                                         |
