Skip to content

Instantly share code, notes, and snippets.

@neuro-sys
Forked from mmozeiko/incbin.c
Created February 27, 2017 17:33
Show Gist options
  • Save neuro-sys/fa52823adef25eed03093a36f8cd93a0 to your computer and use it in GitHub Desktop.
Save neuro-sys/fa52823adef25eed03093a36f8cd93a0 to your computer and use it in GitHub Desktop.
Include binary file with gcc
#include <stdio.h>
#define STR2(x) #x
#define STR(x) STR2(x)
#define INCBIN(name, file) \
__asm__(".section .rodata\n" \
".global incbin_" STR(name) "_start\n" \
".type incbin_" STR(name) "_start, @object\n" \
".balign 16\n" \
"incbin_" STR(name) "_start:\n" \
".incbin \"" file "\"\n" \
\
".global incbin_" STR(name) "_end\n" \
".type incbin_" STR(name) "_end, @object\n" \
".balign 1\n" \
"incbin_" STR(name) "_end:\n" \
".byte 0\n" \
); \
extern const __attribute__((aligned(16))) void* incbin_ ## name ## _start; \
extern const void* incbin_ ## name ## _end; \
INCBIN(foobar, "binary.bin");
int main()
{
printf("start = %p\n", &incbin_foobar_start);
printf("end = %p\n", &incbin_foobar_end);
printf("size = %zu\n", (char*)&incbin_foobar_end - (char*)&incbin_foobar_start);
printf("first byte = 0x%02x\n", ((unsigned char*)&incbin_foobar_start)[0]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment