亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用gcc mingw嵌入二進制Blob

使用gcc mingw嵌入二進制Blob

C
江戶川亂折騰 2019-11-27 11:17:55
我正在嘗試將二進制Blob嵌入到exe文件中。我正在使用mingw gcc。我制作目標文件是這樣的:ld -r -b binary -o binary.o input.txt然后,我查看objdump輸出以獲取符號:objdump -x binary.o它給出了名為的符號:_binary_input_txt_start_binary_input_txt_end_binary_input_txt_size然后,我嘗試在我的C程序中訪問它們:#include <stdlib.h>#include <stdio.h>extern char _binary_input_txt_start[];int main (int argc, char *argv[]){    char *p;    p = _binary_input_txt_start;    return 0;}然后我這樣編譯:gcc -o test.exe test.c binary.o但是我總是得到:undefined reference to _binary_input_txt_start有人知道我在做什么錯嗎?
查看完整描述

3 回答

?
青春有我

TA貢獻1784條經驗 獲得超8個贊

在您的C程序中,刪除前劃線:


#include <stdlib.h>

#include <stdio.h>


extern char binary_input_txt_start[];


int main (int argc, char *argv[])

{

    char *p;

    p = binary_input_txt_start;


    return 0;

}

C編譯器經常(總是?)似乎在extern名稱前加下劃線。我不完全確定為什么會這樣-我認為這個Wikipedia文章聲稱存在某些道理,


對于C編譯器,通常的做法是在所有外部作用域程序標識符前加一個下劃線,以免與運行時語言支持產生的沖突


但是讓我感到震驚的是,如果在所有externs之前都加了下劃線,那么您實際上并沒有對分區進行太多分區。無論如何,這又是一個問題,事實是下劃線確實被添加了。


查看完整回答
反對 回復 2019-11-27
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

我在Linux(Ubuntu 10.10)上進行了測試。

  1. 資源文件:
    input.txt

  2. gcc(Ubuntu / Linaro 4.4.4-14ubuntu5)4.4.5 [生成用于Linux的ELF可執行文件]
    生成symbol _binary__input_txt_start
    接受符號_binary__input_txt_start(帶下劃線)。

  3. i586-mingw32msvc-gcc(GCC)4.2.1-sjlj(mingw32-2)[為Windows生成PE可執行文件]
    生成symbol _binary__input_txt_start。
    接受符號binary__input_txt_start(不帶下劃線)。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 587 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號