如何将PE文件转换为“dos_header”结构?

问题描述

我正在尝试读取 .exe PE 文件并将其映射到标头结构。

这是我目前所拥有的:

static constexpr uint16_t DOS_HDR_MAGIC = 0x5A4D; 

struct dos_header_t {
    uint16_t                    e_magic;
    uint16_t                    e_cblp;
    uint16_t                    e_cp;
    uint16_t                    e_crlc;
    uint16_t                    e_cparhdr;
    uint16_t                    e_minalloc;
    uint16_t                    e_maxalloc;
    uint16_t                    e_ss;
    uint16_t                    e_sp;
    uint16_t                    e_csum;
    uint16_t                    e_ip;
    uint16_t                    e_cs;
    uint16_t                    e_lfarlc;
    uint16_t                    e_ovno;
    uint16_t                    e_res[ 4 ];
    uint16_t                    e_oemid;
    uint16_t                    e_oeminfo;
    uint16_t                    e_res2[ 10 ];
    uint32_t                    e_lfanew;
};

int main(void) {
    std::ifstream input("./stuff.exe",std::ios::in | std::ios::binary );

    input.seekg(0,std::ios::end);
    int file_size = input.tellg();

    char file[file_size];
    input.read(file,file_size);

    struct dos_header_t *dos_header = (struct dos_header_t *)file;

    assert(dos_header->e_magic == DOS_HDR_MAGIC);
}

但是断言失败并且打印 e_magic 打印 0

我施错了吗?如何让断言通过?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)