linux下將資源文件編進可執行文件

有時候需要將一些圖片, 音樂或者字符串文件隨可執行文件一起打包發佈。可以用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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章