gpt4 book ai didi

c++ - 如何解析PE文件不使用API

转载 作者:行者123 更新时间:2023-12-02 10:21:56 25 4
gpt4 key购买 nike

我学习了如何根据此article解析PE文件

在本文中,他们使用现有的API和结构

现在我想自己重写程序,而无需调用api和可用结构。阅读PE文件的一些信息,如下图所示

enter image description here

我想问的是算法或开发人员如何创建它们。能给我一些提示或链接吗?
我需要使用fread()和fseek()来读一本,对吧?

谢谢

编辑:哦,我好奇并且想了解更多

最佳答案

通常有两种方法:

  • 如果您确定二进制格式将始终与相同体系结构上的相同二进制一起使用,则可以将数据读入内存并将其视为“结构指针”。这很可能是原始作者实现它的方式。缺点是该代码不能跨体系结构甚至编译器标志(在结构中填充,对齐等)进行移植。
  • 另一种更可移植的方法是逐项读取数据。这导致大量的代码非常类似于该结构,但是它是可移植且通用的。这些类型的二进制文件格式通常与使用它们的代码一起发展,并且您可以琐碎地插入版本和if语句来更改读取方式。

    例如,使用一个著名的开源项目的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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com