有時候需要將一些圖片, 音樂或者字符串文件隨可執行文件一起打包發佈。可以用objcopy命令。
1. 準備資源文件
文件名:strings.txt
內容: well done!
2. 準備C文件
文件名: main.c
內容:
1 #include <stdio.h>
2 void main()
3 {
4 char *p = "well";
5 printf("%s\n", p);
6 }
3. 資源文件打包
objcopy -I binary -O elf64-x86-64 -B i386 strings.txt strings.o
注意: 我pc是64位系統, 不同平臺,參數不一樣,具體用法請man objcopy
nm strings.o 查看導出符號
000000000000000b D _binary_strings_txt_end
000000000000000b A _binary_strings_txt_size
0000000000000000 D _binary_strings_txt_start
這個導出符號其實是有規律的。。。
objdump -t strings.o 查看保存在哪個段
SYMBOL TABLE:
0000000000000000 l d .data 0000000000000000 .data
0000000000000000 g .data 0000000000000000 _binary_strings_txt_start
000000000000000b g .data 0000000000000000 _binary_strings_txt_end
000000000000000b g *ABS* 0000000000000000 _binary_strings_txt_size
data段,即是全局變量。
4. 修改main.c文件,
#include <stdio.h>
extern char _binary_strings_txt_start[];
extern char _binary_strings_txt_size[];
void main()
{
char *p = "well";
printf("%s\n", p);
printf("%s\n", _binary_strings_txt_start);
int len = (int)_binary_strings_txt_size;
printf("len=%d\n", len);
}
5. 編譯鏈接
gcc main.c -c
gcc main.o strings.o -o main
6. 運行結果
well
well done!
len=11