我学习了如何根据此article解析PE文件
在本文中,他们使用现有的API和结构
现在我想自己重写程序,而无需调用api和可用结构。阅读PE文件的一些信息,如下图所示
我想问的是算法或开发人员如何创建它们。能给我一些提示或链接吗?
我需要使用fread()和fseek()来读一本,对吧?
谢谢
编辑:哦,我好奇并且想了解更多
最佳答案
通常有两种方法:
例如,使用一个著名的开源项目的stream API,您将阅读下面的前几项:
Common::SeekableReadStream * s = ...;
PIMAGE_DOS_HEADER d = new IMAGE_DOS_HEADER;
d->e_magic = s->readUint16LE();
d->e_cblp = s->readUint16LE();
d->e_cp = s->readUint16LE();
...
作为这两种方法之间的中间立场,我开始喜欢Kaitai struct,您在其中以声明性样式编写格式的规范,并让其编译器为您生成struct定义,以及用于读取(和写入!)这些代码的代码。文件格式。
看看their gallery的相应摘录:
mz_header:
seq:
- id: magic
size: 2
- id: last_page_extra_bytes
type: u2
- id: num_pages
type: u2
- id: num_relocations
type: u2
关于c++ - 如何解析PE文件不使用API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59782844/