nm、readelf、objdump哪个强?符号表查看工具终极对比

linux中三个常用查询符号表的命令 这个是最常用的命令,可以用于查询二进制文件中的符号表,包括目标文件(.o)、静态库(.a、.lib)和动态库(.so)等;该命令除了可以查看符号表外,还有一些其他操作,使用时可以借助objdump --help查看。该命令可以用来处理多种文件格式,如ELF、COFF、目标文件、静态库、动态库等;(1)显示文件头信息:可以查看可执行文件或目标文件的头部信息,包括格式、架构等;(6)显示调试信息,如果文件包含调试信息,可以使用如下命令查看。可以查看文件中各个节(section)及大小、地址等; 阅读详情

第一章:符号表的查看

在程序编译和调试过程中,符号表是连接源代码与机器指令的关键数据结构。它记录了变量名、函数名、作用域、地址偏移等信息,帮助开发者理解二进制文件的内部构成。通过查看符号表,可以定位未定义引用、分析链接错误或逆向分析可执行文件。

使用 nm 工具查看符号表

`nm` 是 GNU Binutils 提供的一个命令行工具,用于列出目标文件中的符号。常见的使用方式如下:

# 查看可执行文件中的符号
nm program

# 显示动态符号表(适用于共享库)
nm -D libexample.so

# 按地址排序并显示符号类型
nm -n program
输出结果通常包含三列:符号地址、类型标识和符号名称。例如:
  • 0804a00c B stdout —— 'B' 表示该符号位于未初始化数据段(BSS)
  • 08048400 T main —— 'T' 表示该符号位于文本段(代码段)
  • U printf —— 'U' 表示该符号未定义,需由其他模块提供

符号类型对照表

符号类型含义
T / t全局/局部函数定义
D / d已初始化全局/静态变量
B / b未初始化全局/静态变量(BSS段)
U未定义符号(外部引用)
C未初始化的全局变量

结合 readelf 查看详细节信息

除了 `nm`,还可以使用 `readelf -s` 查看更详细的符号表结构,包括符号索引、大小和节索引。

# 显示完整的符号表条目
readelf -s program
该命令输出的每一行对应一个符号条目,字段包括序号、值(地址)、大小、类型、绑定属性、可见性和所在节区。对于深入分析 ELF 文件布局,此命令尤为有用。

第二章:nm工具深度解析

2.1 符号表基础与nm的核心功能

符号表的作用与结构
符号表是目标文件中记录函数、变量等符号信息的数据结构,用于链接器解析引用关系。每个符号包含名称、地址、大小和类型等属性。
nm工具的基本使用
`nm` 是 GNU Binutils 中用于显示目标文件符号表的命令行工具。通过以下命令可查看可执行文件中的符号:
nm program.o
输出示例如下:
地址类型符号名
0000000000001020Tmain
0000000000002000Ddata_var
其中,T 表示该符号位于文本段(函数),D 表示已初始化数据段变量。
常用选项与输出控制
  • -C:启用 C++ 符号名解码(demangle)
  • -g:仅显示全局(外部)符号
  • -n:按地址排序而非符号名

2.2 nm常用选项与输出格式详解

`nm` 是 GNU Binutils 中用于查看目标文件符号表的命令行工具,广泛应用于调试和二进制分析。
常用命令选项
  • -a:显示所有符号,包括调试符号
  • -g:仅显示全局(外部)符号
  • -n 或 --numeric-sort:按地址排序而非符号名
  • -C:对 C++ 符号进行名称解码(demangle)
  • -S:显示符号值和大小
输出格式说明
默认输出包含三列:符号地址、类型、符号名。例如:

0000000000401106 t deregister_tm_clones
00000000004021c0 T main
0000000000401270 T printf@plt
其中,小写 t 表示局部函数,大写 T 表示全局函数,位于文本段(.text)。符号类型帮助区分变量、函数、弱符号等属性。
自定义输出格式
使用 --format=posix 可生成简洁 POSIX 格式输出,适用于脚本解析。

2.3 实战:使用nm分析静态库符号

在开发和调试C/C++项目时,静态库的符号管理至关重要。`nm` 是 GNU Binutils 中用于查看目标文件符号表的强大工具,能够帮助开发者识别未定义符号、重复定义或链接问题。
常用nm命令选项
  • -C:启用C++符号名解码(demangle)
  • -g:仅显示外部(全局)符号
  • -u:仅显示未定义的符号
  • -D:显示动态符号表(适用于共享库)
实例分析静态库符号
假设有一个静态库 libmath.a,执行以下命令查看其符号:
nm -C libmath.a
输出可能如下:
math.o:
0000000000000000 T add
                 U printf
000000000000000a T multiply
其中,T 表示该符号位于文本段(函数),U 表示未定义符号(需外部提供,如 printf)。通过此信息可确认库依赖关系与导出接口是否完整。

2.4 nm在调试符号冲突中的应用

在复杂系统开发中,静态链接库合并时常出现符号冲突问题。`nm` 作为 GNU Binutils 的核心工具,能列出目标文件的符号表,帮助开发者识别重复或未定义的符号。
常见符号类型解析
  • T/t:全局/局部文本段符号(函数)
  • D/d:已初始化数据段符号
  • U:未定义符号,需外部解析
定位冲突示例
nm libA.a | grep 'func_init'
0000000000000120 T func_init
nm libB.a | grep 'func_init'
0000000000000150 T func_init
上述输出表明 `func_init` 在两个库中均被定义为全局函数(T),链接时将引发“multiple definition”错误。 通过结合 `nm` 与 `objdump` 分析,可进一步确认符号所属源文件及作用域,辅助重构命名或调整编译选项以规避冲突。

2.5 深入ELF结构:nm背后的符号机制

ELF符号表的组织结构
ELF文件中的符号信息存储在 `.symtab` 和 `.dynsym` 两个关键节区中。`.symtab` 包含完整的静态符号表,而 `.dynsym` 仅保留动态链接所需的符号。
typedef struct {
    uint32_t st_name;   // 符号名称在字符串表中的偏移
    uint64_t st_value;  // 符号的地址或值
    uint64_t st_size;   // 符号占用的字节数
    unsigned char st_info; // 类型与绑定属性
    unsigned char st_other; // 未使用
    uint16_t st_shndx;  // 所属节区索引
} Elf64_Sym;
该结构定义了每个符号的元数据。其中 `st_info` 通过位操作区分符号类型(如函数、对象)和绑定类型(全局、局部),是 nm 解析符号属性的核心依据。
nm命令的符号解析流程
nm 工具读取 ELF 文件后,定位到 `.symtab` 并遍历所有符号项,结合 `.strtab` 获取符号名,最终按规则输出符号类型标识。
  • U:未定义符号(外部引用)
  • T:位于文本段的全局函数
  • t:静态函数
  • D:已初始化的全局变量

第三章:readelf工具实战指南

3.1 readelf的架构视角与符号表解析

ELF文件结构中的符号表定位
在ELF(Executable and Linkable Format)文件中,符号表(.symtab 或 .dynsym)用于存储函数、变量等符号信息。`readelf` 工具通过解析 ELF 头和节头表,准确定位符号表节区。
readelf -s example.o
该命令输出目标文件中的符号表内容。字段包括符号索引、值、大小、类型、绑定属性及名称。例如,“FUNC GLOBAL DEFAULT”表示全局函数,“OBJECT LOCAL”则为局部变量。
符号表核心字段解析
  • st_name:符号名称在字符串表中的偏移;
  • st_value:符号的地址或偏移量;
  • st_size:符号占用内存大小;
  • st_info:包含绑定类型(如 LOCAL、GLOBAL)和符号类型(如 FUNC、OBJECT)。
字段含义
Num符号表项编号
Value运行时虚拟地址

3.2 解读.symtab与.dynsym节区内容

在ELF文件中,.symtab和.dynsym是两个关键的符号表节区,分别用于静态链接和动态链接过程中的符号解析。
符号表结构概览
.symtab包含完整的符号信息,通常用于调试和静态链接;而.dynsym仅保留动态链接所需的外部符号,体积更小,提升运行效率。
核心字段解析
每个符号表项为Elf64_Sym结构:

typedef struct {
    uint32_t st_name;
    uint8_t  st_info;
    uint8_t  st_other;
    uint16_t st_shndx;
    uint64_t st_value;
    uint64_t st_size;
} Elf64_Sym;
其中,st_value表示符号的虚拟地址,st_size为符号占用大小,st_info编码符号类型与绑定属性(如全局/局部)。
实际应用场景对比
  • .symtab:被readelf -s读取,支持开发调试
  • .dynsym:由动态链接器ld-linux.so使用,加载时解析函数地址

3.3 实践:定位动态链接失败的符号问题

在动态链接过程中,符号未定义或版本不匹配是常见故障。通过工具链深入分析可快速定位根源。
使用 ldd 和 nm 检测依赖符号
首先检查二进制文件的动态依赖:
ldd ./myapp
nm -D ./myapp | grep ' U '
输出中带 'U' 标记的符号表示未定义引用,需确认其所属共享库是否已正确加载。
启用运行时符号解析日志
设置环境变量以追踪链接过程:
LD_DEBUG=symbols,bindings ./myapp
该命令输出符号查找路径与绑定过程,便于发现“符号版本冲突”或“同名符号覆盖”等问题。
典型问题对照表
现象可能原因解决方案
undefined symbol: foo依赖库未链接或版本过旧重新编译并指定正确 -l 参数
symbol lookup error运行时库路径缺失设置 LD_LIBRARY_PATH 或配置 ld.so.conf

第四章:objdump的多功能剖析

4.1 objdump反汇编之外的符号查看能力

objdump 不仅可用于反汇编,还具备强大的符号表分析能力。通过特定选项,开发者可深入洞察二进制文件的结构组成。
查看符号表信息
使用 -t 选项可列出目标文件中的符号表:
objdump -t program.o
该命令输出包含符号名、地址、类型和所属节区等信息,便于调试符号未定义或重定义问题。
常用符号查看选项对比
选项功能描述
-t显示所有符号表条目
-T仅显示动态符号表(适用于共享库)
-G显示调试符号信息
结合 nm 工具,objdump 的符号查看能力为链接过程分析和程序结构逆向提供了坚实基础。

4.2 结合反汇编定位符号执行流程

在符号执行过程中,程序控制流的精确追踪至关重要。通过结合反汇编技术,可以将高级语义与底层指令对齐,从而准确定位符号执行路径。
反汇编辅助路径约束生成
利用反汇编工具(如IDA Pro或Radare2)提取二进制的控制流图(CFG),可识别关键跳转指令和分支条件。这些信息直接服务于符号执行引擎的路径约束构建。

mov eax, [ebp+input]
cmp eax, 0x42
je target_label
上述汇编片段中,当输入值等于0x42时触发跳转。符号执行器需在此处生成约束:`input == 0x42`,反汇编结果帮助精确定位该比较操作的位置。
符号执行与地址映射
建立符号状态与内存地址之间的映射关系,是实现精准分析的核心。下表展示了典型映射结构:
内存地址对应符号变量约束条件
0x8048a10sym_inputsym_input > 0
0x8048a15sym_lensym_len == 8

4.3 使用objdump分析 stripped 文件的残留符号

在逆向分析中,即使二进制文件经过 strip 处理,仍可能残留调试信息或符号痕迹。`objdump` 是 GNU 工具链中用于展示目标文件信息的强大工具,可揭示 stripped 文件中的隐藏线索。
基本命令与输出解析
objdump -t stripped_binary
该命令列出符号表。尽管 strip 会移除大部分符号,某些局部符号或节符号(section symbols)仍可能存在,如 `.text`、`.data` 对应的地址标记。
识别残留符号类型
  • 节符号:反映代码和数据段布局,有助于定位函数起始地址
  • 调试符号:如包含 `.debug` 相关节名,可能泄露源码结构
  • 未解析符号:动态链接所需的外部函数引用依然保留
结合 -d 参数反汇编时,可借助残留符号更准确地划分函数边界,提升逆向效率。

4.4 多工具协同:objdump与nm的互补场景

在二进制分析过程中,`objdump` 与 `nm` 各有专长,协同使用可实现信息互补。`nm` 擅长快速列出符号表,便于定位函数与全局变量;而 `objdump` 可反汇编代码段,展示具体指令流程。
符号查看与反汇编联动
通过 `nm` 快速筛选目标符号:
nm program | grep main
080491b0 T main
上述输出表明 `main` 函数位于文本段(T),地址为 080491b0。随后使用 `objdump` 定位其汇编代码:
objdump -d program | grep -A10 "main>:"
该命令提取 `main` 函数的反汇编片段,结合符号地址与指令序列,实现从符号到行为的完整追踪。
典型协作流程
  • 使用 nm 列出所有全局符号,识别关键函数入口
  • 利用 objdump -t 验证符号类型与节区分布
  • 通过 objdump -d 反汇编指定函数,分析执行逻辑

第五章:三大工具综合对比与选型建议

性能与资源消耗对比
在高并发场景下,三款工具的资源占用差异显著。以处理 10,000 个并发请求为例:
工具平均响应时间 (ms)CPU 占用率 (%)内存使用 (MB)
Nginx123580
Apache4568190
Caddy1540110
配置复杂度与自动化支持
  • Nginx 配置灵活但需手动管理 HTTPS 证书;
  • Apache 模块化结构清晰,适合传统部署,但性能调优门槛较高;
  • Caddy 内置自动 HTTPS,配置简洁,适合 DevOps 快速迭代。
例如,Caddy 的配置仅需几行即可启用 HTTPS:
example.com {
    reverse_proxy localhost:8080
}
Nginx 则需要额外配置 SSL 证书路径与重定向规则。
实际应用案例分析
某电商平台在迁移过程中对比三者表现:初期使用 Apache 支撑 PHP 应用,随着流量增长出现响应延迟;切换至 Nginx 后性能提升明显,但运维团队需额外维护 Let's Encrypt 脚本;最终部分服务采用 Caddy 托管静态资源与 API 网关,实现零配置 HTTPS 与自动续期,降低运维负担。
图表说明: 在相同负载测试下,Caddy 与 Nginx 的 P95 延迟均低于 20ms,而 Apache 达到 60ms。
nm readelf objdump objcopy 命令之间的关系 objdump, readelf, nm, 和 objcopy 是 GNU Binutils 套件的一部分,它们用于处理二进制文件。objdump: 这是一个能够提供各种信息的程序,包括反汇编输出、源代码交叉引用等。更具体地说,它能够读取并解析二进制文件,然后以人类可读的形式显示这些信息。例如,它可以显示出二进制文件的所有头信息,包括文件的大小、段的数量和类型等。此外,它还能显示二进制文件的每个段的内容,包括段内的机器码和对应的汇编代码。readelf: 这个程序用于显示 ELF 格式文件的详细信息。 阅读详情

相关推荐

剖析ELF文件格式的内容———文件头,段表,符号....(第三章)

目录 1.extern "C" 1.编译阶段——取名 2.链接阶段——找对应的名 参考: 2.extern变量名 1.extern "C" 在阅读代码的时候,常常会看到下面的代码片段: #ifdef __cplusplus extern "C" { #endif // 写例如dll导出函数的定义 #ifdef __cplusplus } #endif 这是一...

u012138730的专栏 8403

使用readelf和objdump查看ELF常见段

就是就是将几个输入目标文件加工后合并成一个输出文件,整个链接过程分两步:空间与地址分配、符号解析与重定位。的3大步骤:启动动态链接器本身 → 装载所有需要的共享对象 → 重定位和初始化。中对这些段又做了详细的解释,用到的时候只需查询即可。中给出了其中常见的段,解释了每个段的含义和用途。查看数据段相关的值需要。查看代码段相关的内容只需要。将16进制打印出来;

yelvens的博客 1万+

关于Kswapd的理解(一)

关于Kswapd的理解(一) 之前跟踪了MemAvailable的计算方式,其中watermark的计算花了很多精力,在学习的过程中看到一些资料中说watermark是给swapd使用的,于是乎,研究一下看看咯 本部分主要记录两个方面: 对于kswapd这个东西,从初学者(我)的角度出发会考虑哪些内容? 跟踪kswapd 初始化结构部分; 1. KSwapd机制 上图是还没有跟踪kswapd code的时候,对自己提出的一些疑问和自身的理解,主要是如下内容: kswapd 机制用来做什么:内存不足时

And乔的博客 2719

readelf简单介绍

readelf是一个在 Unix 和类 Unix 系统上用于查看 ELF(Executable and Linkable Format)文件信息的命令行工具。ELF 文件是一种常用的文件格式,用于定义程序或系统所需的不同类型的文件,如可执行文件、目标文件、共享库等。readelf提供了许多选项来查看 ELF 文件的不同部分和属性,例如程序头、段头、符号表、重定位条目等。这对于理解程序的编译和链接方式、调试以及进行系统级编程非常有用。常用readelf命令选项:查看文件头(h或 -file-header。

u014634649的博客 1509

Google AdSense收款前必做:W-8BEN税务认证的3个关键选择与1个提交时机小技巧

本文深入解析Google AdSense收款前必须完成的W-8BEN税务认证,重点介绍账号类型选择、特殊税率勾选、美国活动界定等3个关键决策,并分享提交时机的小技巧,帮助站长高效通过审核,确保广告收入顺利到账。

weixin_30443731的博客 678

离线语音识别模块LD3320实战:如何低成本给STM32设备加上‘耳朵’和‘嘴巴’?

本文详细介绍了如何为STM32设备集成LD3320离线语音识别模块,实现低成本语音交互方案。从硬件连接到STM32底层驱动实现,再到指令训练与词条优化技巧,完整解析了唤醒词检测与自定义指令识别的全过程。LD3320作为非特定人声识别芯片,无需网络连接,适用于智能家居、工业控制等场景,是嵌入式开发者的理想选择。

weixin_30906185的博客 555

重载原理及Linux查看符号表

函数重载:在相同作用域中的多个函数,具有相同的名字而形参表不同。C++函数重载底层实现原理是C++利用name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。编译器通过函数名和其参数类型 识别重载函数。为了保证类型安全的连接(type-safe linkage),编译器用参数个数和参数类型对每一个函数标识符进行专门编码,这个过程有时称为“名字改编”(name mangling)或“名字修饰”(name decoration)。类型安全的连接使得程序能够调用合适的重载函数并保证了参数传递

weixin_54355176的博客 1324

STM32F103C8T6 驱动2位共阳数码管(基于 74HC595 和 PNP 三极管)

整体设计思路是通过 STM32F103C8T6 控制 74HC595 和 PNP 三极管,实现共阳数码管的显示功能。最初的电路设计中,三极管发射极接 5V 电源,这导致了数码管两位显示相同数字的问题。数码管能够稳定显示 0-99的数字。

qq_40289410的博客 2214

shell之readelf命令

shell之readelf命令

techenliu的博客 726

ThinkAdmin后台Getshell

通过文件包含或者图片马的方式Getshell。修改其可允许的文件类型,php不允许,可添加。系统管理->系统参数配置->本地服务器存储。

hot_milk1的博客 1865

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数,比较通用,包含所有对象类型,可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数。

qq_39541524的博客 827

查看符号表的两种方式 nm readelf

查看符号表的两种方式。

m0_56306892的博客 575

【RBF预测】基于粒子群算法优化RBF神经网络实现数据回归预测含Matlab源码

1 简介 原油含水率预测对于确定油井水,油层位以及估计原油产量有着非常重要意义.BP神经网络是最近常用的原油含水率预测方法,然而,由于BP神经网络存在容易陷入局部极小值,收敛速度慢等问题,影响了其预测的实用性和准确性,对此,提出基于粒子群优化RBF神经网络(PSO-RBFNN)的原油含水率预测方法,粒子群优化算法用于RBF神经网络参数优化.在分析原油含水率预测的影响因素基础上,建立粒子群优化RBF神经网络的原油含水率预测模型.实验结果表明,在原油含水率预测中,基于粒子群优化RBF神经网络比BP神经网络有着

qq_59747472的博客 1234

Linux objdump命令(反汇编、查看符号)

https://blog.youkuaiyun.com/q2519008/article/details/82349869

mayue_web的博客 2万+

微服务架构的实施与挑战:前提判断、三种落地模式、收益兑现与风险应对

微服务是用运维复杂度换取演进自由度的一笔交易,是否划算取决于系统复杂度是否越过生产率曲线的交叉点。本文先给出实施前提:微服务溢价的六项成本、四项前置能力、康威定律与领域边界,并附就绪度自检表;再拆解三种落地模式:以绞杀者为代表的渐进剥离与数据五级迁移、以模块化单体起步的绿地建设、新旧并行的混合式集成;随后逐项审视六大技术优势与组织收益的兑现条件,系统梳理分布式谬误、分布式单体、Saga与幂等、弹性容错、可观测性、契约测试等挑战与对策,最后给出四阶段落地路线、DORA四项度量与常见反模式清单。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ELF文件中的符号

ELF文件中的符号、符号修饰、强引用弱引用问题

chwit的博客 1198

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ELF格式文件符号表全解析及readelf命令使用方法

1. 读取ELF文件头: $ readelf -h sign ELF Header:   Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00   Class:                                                  ELF64   Data:                    

AddyLee的专栏 9万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

elf 分析工具 readelf/nm/objdump

elf 分析工具 readelf/nm/objdump

我的博客 609

使用objdump objcopy查看与修改符号表

我们在 Linux 下运行一个程序,有时会无法启动,报缺少某某库。这时需要查看可执行程序或者动态库中的符号表,动态库的依赖项, Linux 有现成的工具可用:objdump 。 有时我们拿到一个静态库,想调用其中的函数,而某些函数作用域非全局,也可以通过修改符号来达到目的。 Linux 有现成的工具可用: objcopy 。

安晓辉生涯——聚焦程序员的职业规划与成长 3万+

linux命令readelf基本用法

linux命令readelf基本用法

大道之行,始于足下 797

ELF文件解析

读取文件头信息查看elf文件程序头表信息查看elf文件的节信息查看elf文件的依赖库信息。

weixin_44210580的博客 1429

Android readelf 工具查找函数符号

readelf 是一个用于显示 ELF 文件的信息的工具,它可以显示 ELF 文件的各个部分的详细信息,例如头部信息、节(section)表、符号表、动态重定位表等。

简单记录工作和学习 1631

Linux命令:readelf

Linux命令:readelf

深度安全实验室 957

nm和readelf命令的区别

一般来说,对于一个so库有两个符号表,一个是“正常的”(在.symtab和.strtab节中)。一个是动态的(.dynsym和.dynstr节中)。如果这个两个表被移除,那么so库就完全没有用了。动态符号表的符号只被用于动态加载器运行时的加载。而“正常”的符号表,一般是用来调试的,里面的函数符号,是没有被导出的(一般是一些静态函数),所以不可能被外部程序使用。“正常”的符号表里面的函数符号,也不会在动态符号表中。 可以用 nm -D 和 readelf -s这两个命令来显示一个so文件的动态符号表信息。链接

zzbeagle的专栏 1406

readelf命令

readelf命令,一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库(*.so)或者静态库(*.a)等包含ELF格式的文件。 symbols.c #include <stdio.h> int time; int foo(int a) { int b = a + 1; return b; } int main(int argc...

qq_44687693的博客 1542

ELF文件查看利器之readelf用法

Android在NDK开发工具中提供了rea,用来帮助开发者查看编译后目标文件的组成结构和具体内容。 常用的有以下几个功能选项:

Roland_Sun的专栏 2万+
上一篇: 揭秘C++26模块在MSVC中的实现:你必须掌握的5大新特性
下一篇: (量子模块接口安全机制大揭秘):抵御物理层攻击的关键防线
CodeIsle
博客等级 码龄1年 145粉丝 1966原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值