You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用incbin指令编译时包含二进制文件的最后指定字节?

用GNU汇编器incbin直接读取大文件末尾指定字节

针对TB级大文件,无需生成中间文件的解决方案:利用汇编预处理器结合shell命令获取文件大小,计算出从文件开头到目标区域的偏移,再传递给incbin指令。

核心思路

GNU汇编器(as)的.incbin指令语法为:

.incbin "filename"[, skip[, count]]

其中skip是从文件开头算起的字节偏移,count是要读取的字节数。要读取文件最后N字节,只需计算skip = 文件总大小 - N,再将该值传入.incbin即可。

具体实现

  1. 编写汇编文件(例如last_bytes.S):
// 配置参数:目标文件路径和要提取的字节数
#define TARGET_FILE "huge_file.bin"
#define BYTES_TO_EXTRACT 16

// 通过shell的stat命令获取文件总大小(类Unix环境适用)
#define FILE_TOTAL_SIZE $(stat -c %s TARGET_FILE)

.section .rodata
file_last_part:
    // 计算起始偏移:总大小 - 要提取的字节数
    .incbin TARGET_FILE, FILE_TOTAL_SIZE - BYTES_TO_EXTRACT, BYTES_TO_EXTRACT
  1. 编译汇编文件:
    使用GCC调用C预处理器处理汇编文件,再汇编生成目标文件:
gcc -c -x assembler-with-cpp last_bytes.S -o last_bytes.o

或者手动用预处理器+汇编器:

cpp last_bytes.S | as -o last_bytes.o

为什么适合TB级文件

  • stat命令仅读取文件元数据,无需扫描整个文件,耗时可忽略
  • .incbin会通过文件系统的seek操作直接跳到目标偏移位置,仅读取指定字节,不会加载整个TB级文件到内存或磁盘

内容的提问来源于stack exchange,提问作者Cukiernik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:40:13