首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux下,使用nm命令输出可执行文件的符号

目前,我正在DragonOS上开发内核栈traceback程序,因此需要导出内核文件的符号表.这个时候就需要用到Linuxnm命令。...nm命令属于GNU binutils的功能,能够输出可执行文件的符号表。它的用法是这样的: 用法:nm [选项] [文件] 列举 [文件] 中的符号 (默认为 a.out)。...按照字典序输出符号表 这里需要用到-n选项,就以DragonOS的内核文件为例,我们输出来看看: nm -n kernel.elf > nm.txt 为了便于查看,上面的命令把nm的输出重定向到了nm.txt...对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符号重定位入口的行号。...AIX nm 的默认模式对应于 -X 32,GNU nm 不支持模式 -X 32 --defined-only 仅显示有定义的符号 --no-demangle 不解码低级符号名,这是默认选项 --plugin

2.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

Linux命令(63)——nm

1.命令简介 nm命令是GNU Binutils二进制工具集的一员,用于显示目标文件中的符号。如果没有为nm命令指出目标文件,则nm假定目标文件是a.out。 nm命令显示的符号类型。...对于这样的符号,动态链接器将确保在整个过程中只有一个使用此名称和类型的符号。 U 该符号在当前文件中是未定义的,即该符号定义在别的文件中。...当链接未定义的弱定义符号,弱符号的值将变为零,且没有错误。在某些系统上,大写表示已指定默认值 w,W 该符号是一个弱符号,未专门标记为弱对象符号。...当弱定义符号与正常定义符号链接时,使用正常定义符号时不会出错。当链接未定义的弱未定义符号时,该符号的值将以系统特定的方式确定,且不会出错。...对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符号重定位入口的行号。

4.4K00

Unix系统中nm命令展示目标文件符号的方法

【GNU nm命令展示nm参数中的所有目标文件中的符号(默认目标文件是a.out)】 For each symbol, nm shows: o The symbol...当链接时,可能出现多个常用符号同名,这时如果该符号值都被定义了,那么会被当作未定义的引用(重定义错误)】 "D" "d" The symbol is in...【未定义符号,需要从其它对象文件中链接进来】 "u" The symbol is a unique global symbol....【对每个符号,使用调试信息(对象文件编译时增加-g选项)以便找到文件名和行号。对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符号重定位入口的行号。...【仅显示未定义符号(它们对目标文件都是外部的)】 -V --version Show the version number of nm and exit

8810

程序一定要从main函数开始运行吗?

也可以查看需要重定位的符号nm -u test.o U _GLOBAL_OFFSET_TABLE_ U puts 对于UND类型...,这种未定义符号都是因为该目标文件中有关于他们的重定位项,在链接器扫描完所有的输入目标文件后,所有这种未定义符号都应该能在全局符号表中找到,否则报符号未定义错误。...文件格式: readelf -h 列出文件头 readelf -S 列出每个段 readelf -r 列出重定位表 readelf -d 列出动态段 关于查看目标文件符号信息: nm -a 显示所有的符号...nm -D 显示动态符号 nm -u 仅显示没有定义的外部符号 nm -defined-only 仅显示定义的符号 关于符号的说明: 如果符号类型是小写的,表明符号是局部符号,大写表示符号是全局符号...I:该符号对另一个符号的间接引用 N:debug符号 R:该符号位于只读数据区 T:该符号位于代码段 U:该符号在当前文件未定义,定义在别的文件中 ?

1.2K30

如何更新 Linux符号链接 | Linux 中国

UNIX 和 Linux 用户发现链接有很多用途,特别是符号链接。我喜欢使用符号链接的一种方式是管理各种 IT 设备的配置备份。...如上所示,@ 符号表示这些是链接。 创建一个链接 符号链接 Router 指向我的 Netgear RL5000 的 config 目录。...如果我决定用一个新的型号替换这个路由器,使用符号链接的第二个好处就很明显了。我可能会把旧的路由器改成一个接入点。因此,它的目录并没有被删除。...更新一个链接 由于我的主路由器已经改变,我想让路由器的符号链接指向它的目录。...,就把它当作一个正常的文件 -s、--symbolic:制作符号链接而不是硬链接 总结 链接是 UNIX 和 Linux 文件系统中最强大的功能之一。

2.7K20

怎样Hack Linux的内核符号

本文从一个实际例子出发,阐述了在对二进制形式的Linux固件做自动化安全加固的时遇到的技术难题和解决办法。 Linux内核是不是坚不可摧?答案是NO!...而自动化漏扫技术又可单独成文,本文将主要介绍自动化漏洞修复所用到的内核符号Hack技术。 所谓内核漏洞,其实就是Linux内核中存在的缺陷函数。...这里有很多核心问题需要解决,其中之一是修复函数使用未导出内核符号问题。 ? 我们都知道Linux是宏内核架构(Monolithic Kernel)。...为了实现内核功能的动态扩展,Linux又引入了内核模块。内核模块将不可避免的使用内核函数。正常情况下,Linux内核代码会将一些基础功能性函数导出。如控制台输出函数printk等。...对于Linux内核模块而言,它本质上也是动态链接库,因此加载模块时必然存在解析符号地址的函数。

2.3K10

c和fortran混编

比如用nm查看main.o和foo.o [zhxia@ess ~]$ nm main.o U FOO 00000000 T main U表示在main.o中符号foo是未定义的,需要从外部链接进来...有人说foo.o里还有一个未定义符号printf,这个到哪里去 找?gcc总是会有很多默认链接的库和链接选项,这其中包括c的标准库,而printf就在c标准库中。...@ess ~]$ nm foo.o 00000000 T FOO U printf 可以看出,main.o里需要用到符号名为foo_但foo.o里提供的是FOO——不匹配。...但是因为main.o中还有一个未定义符号s_stop,而gcc默认只链接和c相关的库,所以这时使用gcc -osample main.o foo.o会报错,大概就是说s_stop未定义(unreferenced...还有些程序会使用动态链接库.so,那么应该使用nm的-D选项查看这些动态符号

1.5K41

linux内核符号表kallsyms简介

反之,如果没有 kallsyms 的帮助,内核只能将十六进制的符号地址呈现给外界,因为它能理解的只有符号地址,并不能显示各种函数名等符号。...,第二列为类型,第三列为符号名。...注意:如果发现符号地址均为0,那是因为系统保护。使用root权限查看即可。 第二列的类型: 有的符号是大写的,有的是小写。大写的符号是全局的。...b 符号在未初始化数据区(BSS) c 普通符号,是未初始化区域 d 符号在初始化数据区 g 符号针对小object,在初始化数据区 i 非直接引用其他符号符号 n 调试符号 r 符号在只读数据区 s...符号针对小object,在未初始化数据区 t 符号在代码段 u 符号未定义

2.3K20

更新 Linux符号链接方法命令

UNIX 和 Linux 用户发现链接有很多用途,特别是符号链接。我喜欢使用符号链接的一种方式是管理各种 IT 设备的配置备份。...如上所示,@ 符号表示这些是链接。 创建一个链接 符号链接 Router 指向我的 Netgear RL5000 的 config 目录。...如果我决定用一个新的型号替换这个路由器,使用符号链接的第二个好处就很明显了。我可能会把旧的路由器改成一个接入点。因此,它的目录并没有被删除。...更新一个链接 由于我的主路由器已经改变,我想让路由器的符号链接指向它的目录。...,就把它当作一个正常的文件 -s、--symbolic:制作符号链接而不是硬链接 总结 链接是 UNIX 和 Linux 文件系统中最强大的功能之一。

2.1K20

Linux基本命令与常用符号

-f 对输出的文件不排序,使用此选项后aU选项生效,lst选项失效 -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs...的属性改成与anaconda-ks.cfg一样 [root@zutuanxue ~]# stat hello-linux.txt 文件:hello-linux.txt 大小:12...[root@zutuanxue ~]# stat hello-linux.txt 文件:hello-linux.txt 大小:12 块:8 IO 块:4096...拷贝 -i 覆盖前询问(使前面的 -n 选项失效) -n 不要覆盖已存在的文件(使前面的 -i 选项失效) -R, -r, --recursive 递归复制目录及其子目录内的所有内容 -s 只创建符号链接而不复制文件...二、常用符号 * 任意字符串 ? 任意字符 / 路径间隔符 ~ 当前用户的家目录 管理员家目录为/root,其它用户的家目录在/home/用户名

89110

Linux中移除(删除)符号链接的命令

你可能有时需要在 Linux 上创建或者删除符号链接。如果有,你知道该怎样做吗?之前你做过吗?你踩坑没有?如果你踩过坑,那没什么问题。如果还没有,别担心,我们将在这里帮助你。...使用 rm 和 unlink 命令就能完成移除(删除)符号链接的操作。 什么是符号链接? 符号链接(symlink)又称软链接,它是一种特殊的文件类型,在 Linux 中该文件指向另一个文件或者目录。...1) 使用 rm 命令怎样移除符号链接文件 rm 命令是在 Linux 中使用最频繁的命令,它允许我们像下列描述那样去移除符号链接。...y 1a) 使用 rm 命令怎样移除符号链接目录 这像移除符号链接文件那样。使用下列命令移除符号链接目录。...# unlink symlinkdir3/ unlink:cannot unlink ‘symlinkdir3/': Not a directory 总结 以上所述是小编给大家介绍的Linux中移除

4.4K21
领券