2019年8月13日 星期二

[Linux] Binary Link

簡述:

城市中有時會用到一大塊的二進位資料, 有幾種方法可以處理. 或是把它轉成 C 的原始檔, 不過這樣會犧牲處存空間及編譯的時間. 在 Linux 上, 可以用 ld 搭配程式中使用巨集, 可以做到二進位資料的直接鏈結, 不需要先轉成原始碼再編譯.

二進位檔轉成原始檔:

$ xxd –i image_src.jpg > image_src.h


範例:

以下以 image_src.jpg 作為 二進位資料檔

二進位資料處理:

$ ld –r –b binary –o image_src.o image_src.jpg

這時就會把 image_src.jpg 的內容, 放到 image_src.o 裡面, 如果有好幾個輸入檔, 可以連續輸入

$ ld –r –b binary –o image_src.o image_src_1.jpg image_src_2.jpg

檢視目的檔 (*.o) 中的二進位資料符號:

$ objdump –t image_src.o

可以看到如下的資料, 這些就是在資料連結階段所參考到的符號

SYMBOL TABLE:
0000000000000000 l    d  .data    0000000000000000 .data
0000000000000000 g       .data    0000000000000000 _binary_image_src_jpg_start
000000000000c815 g       .data    0000000000000000 _binary_image_src_jpg_end
000000000000c815 g       *ABS*    0000000000000000 _binary_image_src_jpg_size

參考用巨集 :

#define EXT_SYMBOL(NAME) \
   extern const unsigned char _binary_ ## NAME ## _start[]; \
   extern const unsigned char _binary_ ## NAME ## _end[];
#define EXT_VARIABLE(NAME) \
   _binary_ ## NAME ## _start
#define EXT_LENGTH(NAME) \
   ((_binary_ ## NAME ## _end) - (_binary_ ## NAME ## _start))

沒有留言:

張貼留言

[ NT98515] CROSSCOMPILE ECLIPSE PAHO MQTT C Client

簡述: 試著把 Eclipse Paho MQTT C client  移植到 NT98515 的平台, 並且測試驗證. 下載 source: git clone https://github.com/eclipse/paho.mqtt.c make: cmake $ cmake...