close
不知道用「內嵌」這個名詞是否精確,也許計算機科學界有更正式的名稱。不管如何,我現在所要做的事情就是把一些外部資料合併到執行檔裡面。這樣一來使用者複製程式時,不會因為漏掉這些資料而導致程式無法執行。
這邊以最基本的 Hellow world 作為範例。
- 準備好要處理的檔案: mian.c 、 data.txt 。(這兩個檔案的內容如後)
- 執行:objdump -f sth.o
這步驟是用來觀察 file format 跟 architecture 的內容
sth.o 可以是任何一個用 gcc 編譯出來的目的檔 - 執行:objcopy -I binary -O [file format] -B [architecture] data.txt data.o
產生 data.o - 執行:objdump -t data.o
這步驟是用來在 main.c 中引用資料觀察相關變數的命名 - 執行:gcc -o Hellow.exe main.o data.o
編譯出執行檔 Hellow.exe
data.txt 的內容:
Hellow world
main.c 的內容:
- #include <stdio.h>
- extern char binary_data_txt_start;
- extern char binary_data_txt_end;
- int main()
- {
- char *p=&binary_data_txt_start;
- char *e=&binary_data_txt_end;
- for(;p<e;++p)
- putchar(*p);
- return 0;
- }
PS.gcc較早的版本,最前面要多加底線,例如 _binary_data_txt_start
全站熱搜