실행파일의 .data 섹션에 데이타 내장하기를 간단하게 테스트해봄.
컴파일러는 MinGW를 사용했음. 우선.. 내장시킬 파일을 아래와 같이 만듬.
hello world~ i'm in executable file.
다음 위의 파일을 바이너리 데이타로 변경함.
$ objcopy --input-target binary --output-target elf32-i386 --binary-architecture i386 data.txt data.o
다음 만들어진 파일이 제대로 만들어졌는지 심볼을 검사함.
$ nm data.o
00000026 D _binary_data_txt_end
00000026 A _binary_data_txt_size
00000000 D _binary_data_txt_start
여기서 파일이름이 data.txt 이므로 심볼이름 중간에 *_data_txt_*가 들어갔음.
만약 파일이름이 바뀌면 다른 이름으로 심볼이름이 변경될것임. (주의!!)
다음 테스트 코드에 위의 심볼을 내장함.
/* main.c */
#include <stdio.h>
// MinGW의 경우는 아래와 같이하고.. 리눅스의 경우는 extern int _binary.. 로 수정함.
extern char binary_data_txt_end;
extern char binary_data_txt_size;
extern char binary_data_txt_start;
int main(void)
{
int size = (int)&binary_data_txt_size;
char *data = (char *)&binary_data_txt_start;
char *end = (char *)&binary_data_txt_end;
printf("taille: %d\n", size);
printf("buffer: %s", data);
printf("start: 0x%p ; end: 0x%p\n",data,end);
return 0;
}
$ gcc -o test main.c data.o
$ ./test
taille: 38
buffer: hello world~ i'm in executable file.
start: 0x00402000 ; end: 0x00402026