首页 > 编程语言 >C/C++中利用汇编incbin来包含二进制文件

C/C++中利用汇编incbin来包含二进制文件

时间:2022-08-24 14:00:44浏览次数:76  
标签:end name 二进制 incbin C++ start https foobar

 

https://gist.github.com/mmozeiko/ed9655cf50341553d282

#include <stdio.h>

#define STR2(x) #x
#define STR(x) STR2(x)

// this aligns start address to 16 and terminates byte array with explict 0
// which is not really needed, feel free to change it to whatever you want/need
#define INCBIN(name, file) \
    __asm__(".section .rodata\n" \
            ".global incbin_" STR(name) "_start\n" \
            ".balign 16\n" \
            "incbin_" STR(name) "_start:\n" \
            ".incbin \"" file "\"\n" \
            \
            ".global incbin_" STR(name) "_end\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]);
}

 

https://csl.name/post/embedding-binary-data/

 

https://github.com/codeplea/hexembed

 

https://codeplea.com/embedding-files-in-c-programs

 

https://www.devever.net/~hl/incbin

 

标签:end,name,二进制,incbin,C++,start,https,foobar
From: https://www.cnblogs.com/sinferwu/p/16619650.html

相关文章

  • c++单例模式
    单例模式的意图:一个类只能有一个实例。 //非线程安全版本1classSingleton{2private:3Singleton();4Singleton(constSingleton&);5public:......
  • 基于MFC和C++的校园导航系统
    基于MFC和C++的校园导航系统基于MFC和C++实现校园导航系统项目简介设计一款面向广大师生和外来办公或参观人员的校园导航系统,为校外人员来校办事提供便利。校园导航系......
  • C++ 函数重载
    1.C++可以使用同名函数[重载函数]实现功能类似的多个不同函数,C语言不支持函数重载;2.函数名重载即函数名相同,但是,函数的参数(形参)绝不相同:1)参数个数不同;2)或参数的类......
  • 二进制位运算
    二进制位运算基础及其应用:一、基本位运算符:1.&按位与:(从左到右)二进制中对应位都是1则为1,否则为0;2.|按位或:(从左到右)二进制中对应位有一个是1则为1,否则为0;3.^按位异或......
  • C++ 默认参数
    1.C++支持函数的默认参数,C语言不支持;2.默认参数只能放在最后面。#include<iostream>#include<windows.h>#include<string>usingnamespacestd;voidscorePri......
  • C++一些新的特性的理解
    一、智能指针为什么需要智能指针?智能指针主要解决一下问题:内存泄漏:内存手动释放,使用智能指针可以自动释放共享所有权的指针的传播和释放,比如多线程使用同一个对象时......
  • C++ Primer“引用的引用”
    《C++primer》中有一句因为引用本身不是对象,所以不能定义引用的引用。inti=1024;int&a=i;int&b=a;容易引起误解,语句int&b=a;并没有语法错误。可以这......
  • const限定符_c++Primer
    const对象必须初始化,因为const对象一旦创建后其值就不能改变。默认情况下,const对象仅在文件内有效在一个文件中定义const,在多个文件中声明并使用,解决办法:对于const变量不......
  • C++协程
    协程协程是能暂停执行以在之后恢复的函数。协程是无栈的:它们通过返回到调用方暂停执行,并且恢复执行所需的数据与栈分离存储。这样就可以编写异步执行的顺序代码(例如不......
  • rocky二进制安装mysql8.0
    (ubuntu的有点问题)点击查看代码#!/bin/bashVersion=`cat/etc/os-release|awk-F'"|''/^NAME/{print$2}'`SQLSERVER=mysql-8.0.28-linux-glibc2.12-x86_64.tar.x......