nm 命令
-t radix --radix=radix符号值得进制。d十进制, o八进制, x十六进制.
-D --dynamic显示动态符号,只在对象是动态时有用.
-f format --format=format输出的格式,有"bsd","sysv" 或"posix"可选。默认是“bsd”.
-g --extern-only 只显示外部符号.
-l --line-numbers 对每一个符号,使用调试信息去查找文件名和行号。
-u --undefined-only 只显示未定义的符号.
--defined-only 只显示已定义的符号.
--help
下面是执行命令后的一段显示
00000000 b .bss
00000000 d .data
00000000 r .rdata
00000000 t .text
U ___main
00000000 T _add
0000000d T _main
00000000 D _num1
00000004 D _num2
U _printf
其中符号名称的含义:
- A 符号值是绝对的。在进一步的连接中,不会被改变。
- B 符号位于未初始化数据段(known as BSS).
- C共用(common)符号.共用符号是未初始化的数据。在连接时,多个共用符号可能采用一个同样的名字,如果这个符号在某个地方被定义,共用符号被认为是未定义的引用.
- D已初始化数据段的符号
- G已初始化数据段中的小目标(small objective)符号.一些目标文件格式允许更有效的访问小目标数据,比如一个全局的int变量相对于一个大的全局数组。
- I 其他符号的直接应用,这是GNU扩展的,很少用了.
- N 调试符号.
- R 只读数据段符号.
- S 未初始化数据段中的小目标(smallobject)符号.
- T 代码段的符号.
- U 未定义符号.
- V 弱对象(weak object)符号.当一个已定义的弱符号被连接到一个普通定义符号,普通定义符号可以正常使用,当一个未定义的弱对象被连接到一个未定义的符号,弱符号的值为0.
- W一个没有被指定一个弱对象符号的弱符号(weak symbol)。 - a.out目标文件中的刺符号(stabs symbol).
这种情况下,打印的下一个值是其他字段,描述字段,和类型。刺符号用于保留调试信息.
? 未知符号类型,或者目标文件特有的符号类型.
strings 命令
-f 输出前带文件名字
strings -f a.out
-n 可以设置“连续的可打印字符最小长度”(默认是4)
strings -n 6 a.out
如果不知道代码编译到哪个库中去了, 可以用
find -name "*" | xargs strings -f | grep xxx
- find -name “*” --这个目录下的所有文件
- xargs strings -f --相当于strings -f xxx 只不过这个xxx文件是上面find查找到的
- grep “x” --筛选有“x” 的文字
xargs 命令
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。
通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,
下面是一些如何有效使用xargs 的实用例子。
- 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list too long. 用xargs 去避免这个问题
find ~ -name ‘*.log’ -print0 | xargs -0 rm -f
- 获得/etc/ 下所有*.conf 结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs ,在这个例子中实用 xargs将find 命令的输出传递给ls -l
find /etc -name "*.conf" | xargs ls –l
- 假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接
cat url-list.txt | xargs wget –c
- 查找所有的jpg 文件,并且压缩它
find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
- 拷贝所有的图片文件到一个外部的硬盘驱动
ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory