在Linux下搞軟件開發(fā)的朋友, 幾乎沒有不知道strings命令的。我們先用man strings來看看:
strings - print the strings of printable characters in files.
意思是, 打印文件中可打印的字符。 我來補(bǔ)充一下吧, 這個(gè)文件可以是文本文件(test.c), 可執(zhí)行文件(test), 動(dòng)態(tài)鏈接庫(test.o), 靜態(tài)鏈接庫(test.a)
選項(xiàng):
-a --all:掃描整個(gè)文件而不是只掃描目標(biāo)文件初始化和裝載段
-f –print-file-name:在顯示字符串前先顯示文件名
-n –bytes=[number]:找到并且輸出所有NUL終止符序列
- :設(shè)置顯示的最少的字符數(shù),默認(rèn)是4個(gè)字符
-t --radix={o,d,x} :輸出字符的位置,基于八進(jìn)制,十進(jìn)制或者十六進(jìn)制
-o :類似--radix=o
-T --target= :指定二進(jìn)制文件格式
-e --encoding={s,S,b,l,B,L} :選擇字符大小和排列順序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
@ :讀取中選項(xiàng)
脫離代碼地長篇大論而不去實(shí)際驗(yàn)證,不是我的風(fēng)格。 還是搞點(diǎn)代碼下菜吧(代碼存在test.c中):
我們來看看strings test.c的結(jié)果:
[taoge@localhost learn_c]$ strings test.c
#include <stdio.h>
int add(int x, int y)
return x + y;
int main()
int a = 1;
int b = 2;
int c = add(a, b);
printf("oh, my dear, c is %d\n", c);
return 0;
[taoge@localhost learn_c]$
可以看到linux命令大全,確實(shí)打印出了test.c中的很多字符。
下面linux命令大全, 我們對(duì)可執(zhí)行文件用strings試試, 如下:
[taoge@localhost learn_c]$ gcc test.c
[taoge@localhost learn_c]$ strings a.out
/lib/ld-linux.so.2
=$TsU
__gmon_start__
libc.so.6
_IO_stdin_used
printf
__libc_start_main
GLIBC_2.0
PTRh
[^_]
oh, my dear, c is %d
[taoge@localhost learn_c]$
可以看到, 打印出了a.out中很多字符。
實(shí)際上, 如果有目標(biāo)文件、靜態(tài)庫或動(dòng)態(tài)庫, , 也是可以用strings命令進(jìn)行打印操作的。 我們來看看:
xxx.h文件:
void print();
xxx.c文件:
#include <stdio.h>
#include "xxx.h"
void print()
{
printf("rainy days\n");
}
然后, 我們來看看怎么制作靜態(tài)、動(dòng)態(tài)庫吧(在后續(xù)博文中會(huì)繼續(xù)詳細(xì)介紹):
[taoge@localhost learn_strings]$ ls
xxx.c xxx.h
[taoge@localhost learn_strings]$ gcc -c xxx.c
[taoge@localhost learn_strings]$ ar rcs libxxx.a xxx.o