linux下把普通文件链接到可执行文件中

    有时候,我们可能需要将一个普通文件的内容,链接到可执行程序中,便于软件发布。本文就来探讨一下在linux下如何把普通文件链接到可执行文件中,如何又怎么取出该文件内容。

    这边就用一个实例来讲述如何实现该目标,这边主要有两个文件,一个是.c文件:test.c,一个是普通文件:text.txt文件,test.txt文件内容为hello world,实例代码如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <elf.h>

asm(".balign 4096");
asm("_binary__module_start:");
asm(".incbin \"test.txt\"");
asm("_binary__module_end:");

extern char _binary__module_start[];
extern char _binary__module_end[];

int main(int argc, char *argv[])
{
    int len;
    char *ptr;

    len = _binary__module_end - _binary__module_start;
    ptr = (char *)malloc(len + 1);
    if (ptr == NULL) {
        return -1;
    }
    memset(ptr, 0, len + 1);
    memcpy(ptr, _binary__module_start, len);
    printf("%s.\n", ptr);
    free(ptr);

    return 0;
}
注意:在该文件对应目录下要有test.txt文件。

    asm(".balign 4096");是说文件按照4096字节对齐,这linux的可执行文件加载到内存都是按照一个page加载到内存的,而linux默认一个page是4096字节,所以这边就按照4096字节对齐,这最好是用page相关的宏;asm("_binary__module_start:");是文件开始的标识,该标识也是文件开始指针,asm("_binary__module_end:");文件标识结束,文件结束指针;INCBIN 指令在被汇编的文件内包含一个文件。 该文件按原样包含,没有进行汇编。

       gcc -o test test.c编译源文件,生成test可执行文件,该可执行文件就已经包含了test.txt。执行该源文件,结果如下所示:

root@chen-virtual-machine:~/桌面# ./test
hello world!
.
    从该实例就可以知道应该怎么样把普通文件链接到可执行文件中并读取普通文件内容了。当然也可以把其它文件,如可执行的二进制文件链接到可执行文件中,然后在该可执行文件中执行该二进制可执行文件,这可以简化软件的操作流程。


水平有限,可能表述不一定正确,还望见谅!



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值