이진 블롭을 elf 바이너리에 임베드하는 방법을 자세히 설명하는 stackoverflow 및 기타 장소에 대한 게시물이 많이 있습니다.objcopy로 elf에 바이너리를 삽입하면 정렬 문제가 발생할 수 있습니까?
Embedding binary blobs using gcc mingw
과 가장 완벽한 대답 인
C/C++ with GCC: Statically add resource files to executable/library
.하지만 아무런 언급이없는 문제가 있습니다. 여기에 quicky은 foo.o하는 coverted에 foo.txt 것 : 이제
$ objdump -x foo.o
foo.o: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 0000000d 00000000 00000000 00000034 2**0
CONTENTS, ALLOC, LOAD, DATA
SYMBOL TABLE:
00000000 l d .data 00000000 .data
0000000d g .data 00000000 _binary_foo_txt_end
0000000d g *ABS* 00000000 _binary_foo_txt_size
00000000 g .data 00000000 _binary_foo_txt_start
, 나는 정말이 모든 출력을 grok 수 없습니다 - 문서가이 물건이 ??? 나는 그것의 대부분이 충분히 "g"는 세계적이고 "l"은 지역 등이라고 생각한다.
. 무엇이 가장 중요한지는 .data 세그먼트의 정렬이 0으로 설정되었다는 것이다. 방법? 예 : 링크 할 때, 링커는 "아, 네, 어디든 ..."이라고 말합니다.
char 데이터를 임베드하거나 x86에서 작업하는 경우에는 알 수 없습니다. 그러나 int 데이터를 삽입하거나 ARM에서 16 비트 및 32 비트 데이터를 작성하는 경우 언제든지 정렬 트랩을 얻을 수 있습니다.
objcopy는 이진 BLOB의 정렬을 지정하는 또 다른 옵션이 필요하거나 깨 졌으므로이 방법을 전혀 사용하지 않아야한다는 느낌입니다.
이것은 나를 위해 일했습니다. –