C 语言将 二进制文件导入到数据并编译

参考链接
https://github.com/graphitemaster/incbin

#include <stdio.h>

// 定义数据段的起始和结束符号
__asm__ (
    ".section .binaryfile,\"a\"\n"		/* 定义数据段 */
    ".global __binaryfile_start\n"		/* 定义段的起始符号 */
    ".global __binaryfile_end\n"		/* 定义段的结束符号 */
    "__binaryfile_start:\n"				/* 段的起始位置标记 */
    ".incbin \"binaryfile.bin\"\n"		/* 导入二进制数据 */
    "__binaryfile_end:\n"				/* 段的结束位置标记 */
    ".previous\n"						/* 切换为 __asm__ 之前的段,保证后续数据不会被错误添加 */
);

// 声明外部符号
extern unsigned char __binaryfile_start;
extern unsigned char __binaryfile_end;

int main() {
    unsigned char *binaryfile_start = &__binaryfile_start;
    unsigned char *binaryfile_end = &__binaryfile_end;
    size_t binaryfile_len = binaryfile_end - binaryfile_start;

    printf("Binary file length: %zu bytes\n", binaryfile_len);

    // 访问嵌入的二进制数据
    for (size_t i = 0; i < binaryfile_len; i++) {
        printf("%02x ", binaryfile_start[i]);
    }
    printf("\n");

    return 0;
}
posted @ 2024-07-30 13:50  infinite_ryvius  阅读(259)  评论(0)    收藏  举报