我想从体育课上得到现在的尺码,但似乎错了
我有这个密码:
hModule = GetModuleHandleW(NULL);
pDH = (PIMAGE_DOS_HEADER)hModule;
pNTHeaders = (PIMAGE_NT_HEADERS)((LPBYTE)hModule+pDH->e_lfanew);
dwSize = pNTHeaders->OptionalHeader.SizeOfImage;
区别在于:
当前exec=>246 kb
pNTHeaders->OptionalHeader.SizeOfImage=>356352=>348kb
所以,这段代码有什么问题,为什么PE在Kb中不同。
最佳答案
加载图像的大小不一定(实际上,几乎肯定永远不会)与磁盘上二进制文件的大小相同。例如,当您编写包含一些静态数据的程序时,编译器必须为映像中的数据分配空间。但是,如果该数据未初始化或全部为零,则仅在二进制文件中存储大量零将是浪费。没有人会因为你写了一个满是零的1+GiB exe文件而高兴
int a[1024*1024*256] = {};
你密码里的某个地方。相反,.exe文件将简单地存储数据应该在加载的映像中的大小和位置,并且OS将在加载映像时在该位置分配和映射适当的内存…
关于c++ - PE SizeOfImage错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53697603/