close

不知道用「內嵌」這個名詞是否精確,也許計算機科學界有更正式的名稱。不管如何,我現在所要做的事情就是把一些外部資料合併到執行檔裡面。這樣一來使用者複製程式時,不會因為漏掉這些資料而導致程式無法執行。

這邊以最基本的 Hellow world 作為範例。

  1. 準備好要處理的檔案: mian.c 、 data.txt 。(這兩個檔案的內容如後)
  2. 執行:objdump -f sth.o
    這步驟是用來觀察 file format 跟 architecture 的內容
    sth.o 可以是任何一個用 gcc 編譯出來的目的檔
  3. 執行:objcopy -I binary -O [file format] -B [architecture] data.txt data.o
    產生 data.o
  4. 執行:objdump -t data.o
    這步驟是用來在 main.c 中引用資料觀察相關變數的命名
  5. 執行:gcc -o Hellow.exe main.o data.o
    編譯出執行檔 Hellow.exe

data.txt 的內容:

Hellow world

main.c 的內容:

  1. #include <stdio.h>
  2.  
  3. extern char binary_data_txt_start;
  4. extern char binary_data_txt_end;
  5.  
  6. int main()
  7. {
  8.     char *p=&binary_data_txt_start;
  9.     char *e=&binary_data_txt_end;
  10.     for(;p<e;++p)
  11.         putchar(*p);
  12.     return 0;
  13. }

PS.gcc較早的版本,最前面要多加底線,例如 _binary_data_txt_start

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ren1244 的頭像
    ren1244

    ren1244的部落格

    ren1244 發表在 痞客邦 留言(0) 人氣()