PE 头的大小
有没有办法在不读取全部或整个文件的情况下找出 PE 标头的大小?
Is there a way to find out the size of a PE Header without reading all of it or the entire file?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以这样计算 PE 标头的总大小:
文件标头始终具有相同的大小,但OptionalHeader 的大小可以不同,节表大小也可以不同。
OptionalHeader的大小存储在
FileHeader.SizeOfOptionalHeader
中,节表大小等于FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER)
和一些C代码:
您所要做的就是阅读DOS header,获取PE偏移量(e_lfanew)并将PE.Signature + PE.FileHeader读入内存。这是两次固定大小的读取操作,您就拥有了所需的所有信息。
You can calculate the total size of the PE header like this:
The file header always has the same size but the OptionalHeader's size can differ, as can the section table size.
The OptionalHeader's size is stored in
FileHeader.SizeOfOptionalHeader
, and the section table size equalsFileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER)
And some C code:
All you have to do is read the DOS header, get the PE offset (e_lfanew) and read PE.Signature + PE.FileHeader into memory. That's two reading operations of fixed size and you have all the info you need.