解读PE/COFF文件格式

Windows平台内开发操作系统,在用Cygwin版的GCC编译源文件是遇到这样一个问题,如果使用gcc –c bootpack.c会生成bootpack.o文件,使用HEX编辑器打开改文件你会看到这样的代码:图1代码中红色框内的可读文字是COFF标准文件格式中定义的文字。这些文字以及其他部分二进制,都是程序本身以外定义的用来便于系统运行的。这些辅助的数据可以被windows识别,
摘要由CSDN通过智能技术生成

Windows平台内开发操作系统,在用Cygwin版的GCC编译源文件是遇到这样一个问题,如果使用gcc –c bootpack.c会生成bootpack.o文件,使用HEX编辑器打开改文件你会看到这样的代码:

1

代码中红色框内的可读文字是COFF标准文件格式中定义的文字。这些文字以及其他部分二进制,都是程序本身以外定义的用来便于系统运行的。这些辅助的数据可以被windows识别,但是不能被Linux以及其他操作系统识别。更不用说是自己开发的小型操作系统。

那么如何解决这个问题呢?Cygwin内提供了很多处理二进制文件的工具,例如objcopy,运行objcopy bootpack.o –O binary bootpack.bin。我们再来看看bootpack.bin的内容。

2

内容少了很多,上图中红色框的数据都没有了。再仔细看看就发现图2中的数字来自图1 0x 0000008C 位置到0x000000CB位置的内容。这些内容才是真正的执行指令。那么bootpack.o大部分内容都有什么含意和作用呢?出于好奇心,我在微软下载了Visual Studio, Microsoft Portable Executable and Common Object File Format Specification。并根据该文件编写了一个解析.exe,.obj,.dll等文件的小程序olink

 

先看看使用该程序解析上文bootpack.o后会是什么输出结果。

bootpack.c的源代码很简单:

/*Colimas Simple OS*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值