我需要字节大小,IMAGE_OPTIONAL_HEADER.SizeOfImage似乎四舍五入到(不确定)边界,并且大于实际文件大小。如何使用标题确定精确的PE图像文件大小?
7
A
回答
9
IMAGE_OPTIONAL_HEADER.SizeOfImage
是虚拟内存中加载的可执行文件/ dll的大小。 它与磁盘上的大小不一样。
你可以用最后一节的VirtualAddress + VirtualSize
来计算它。
IMAGE_OPTIONAL_HEADER.SizeOfImage
是该值四舍五入到IMAGE_OPTIONAL_HEADER.SectionAlignment
的值(通常与页面大小相同)。
2
if(LastSectionVirtualSize >= LastSectionSizeOfRawData)
{
if(LastSectionVirtualSize % LastSectionSectionAlignment)
{
TempValue = LastSectionVirtualSize - (LastSectionVirtualSize % LastSectionSectionAlignment) + LastSectionSectionAlignment ;
}
else
{
TempValue = LastSectionVirtualSize ;
}
}
else
{
if(LastSectionSizeOfRawData % LastSectionSectionAlignment)
{
TempValue = LastSectionSizeOfRawData - (LastSectionSizeOfRawData % LastSectionSectionAlignment) + LastSectionSectionAlignment ;
}
else
{
TempValue = LastSectionSizeOfRawData ;
}
}
OH.SizeOfImage = TempValue + dwLastSecRVA ;
1
其实,接受的答案是不正确的。要在磁盘上获得可执行文件的大小,您应计算最后一部分的PointerToRawData
+ SizeOfRawData
,而不是虚拟对应部分。有关示例,请参阅http://www.strchr.com/creating_self-extracting_executables
另请注意,有些编译器喜欢在最后一节之后附加调试信息。一定要去掉任何符号表或设置释放模式,具体取决于你使用的编译器,这样才能工作。
相关问题
- 1. 如何确定HICON图标的大小?
- 2. 如何用Bootstrap精确定位标题?
- 3. 如何获得精确的位图文件大小?
- 4. 确定文件夹大小
- 5. 如何使用Hive确定HDFS中的文件大小
- 6. 如何确定前的文件大小使用PHP卷曲
- 7. 确定文件大小的适当图像质量?
- 8. 如何将textview转换为精确大小的图像,如屏幕截图
- 9. 使用Mongoid确定文档的大小
- 10. 使用javascript确定图像大小(以像素为单位)
- 11. 如何使用FileSystemObject.Size可靠地确定文件夹大小?
- 12. 确定图像文件大小之前缩放
- 13. 如何处理图像的精确UITouch?
- 14. 如何确定Android视图的像素大小?
- 15. 如何确定双精度小数?
- 16. PHP,确定远程文件的大小
- 17. 如何在c#中使用精确大小打印矩形?
- 18. 正确定位响应图像标题?
- 19. Flash导入的图像有不正确的文件大小
- 20. 在matplotlib中使用bbox_inches ='tight'时,如何获得具有像素精确大小的图像?
- 21. 在VB.NET中确定文件大小
- 22. NodeJS - 读取图像源返回不正确的文件大小
- 23. UIL加载精确图像
- 24. TableView中的图像大小不正确
- 25. 确定使用的库,以减少JAR文件的大小
- 26. 确定在上传流中使用imagepng的文件大小
- 27. 使用Python确定文件系统的簇大小
- 28. BASH问题填充文件直到确定的大小
- 29. 问题确定当前正在下载的文件大小?
- 30. 如何删除小于特定大小的图像文件?
我发现有些东西在证书表等部分的外部存在,例如看看KERNEL32.DLL,重定位部分结束后跟证书表,所以以及我也会检查数据目录表。 – Lloyd