高分求助----棘手问题-Windows, NTFS, 单个可执行文件大小限制

shyboy_NWPU 2009-10-27 08:10:51
NTFS文件系统下,单个文件大小可以超过4G,但是我生成了一个大于4G的单个可执行文件,运行时却弹出"xxx.exe不是有效的Win32程序"的提示框,我稍微测试了一下,生成一个3G多的可执行文件,可以正常运行;刚好是4G的可执行文件还没测试。
请教各位高手........何解?
...全文
957 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahao 2009-10-28
  • 打赏
  • 举报
回复
winrar有没有64位版本的?或者能生成64位的自解压exe的呢?
shyboy_NWPU 2009-10-28
  • 打赏
  • 举报
回复
补充:用WinRar打了一个大于4G的自解压包,在64位Windows下也不过运行
shyboy_NWPU 2009-10-28
  • 打赏
  • 举报
回复
哟,写错了一个字,应该是"不能执行".

结贴,散分,特别鸣谢:
“ ahao
(天·狼·星)”
shyboy_NWPU 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ahao 的回复:]
按理说,32位系统没法支持大于4g的
试试winrar吧,商业软件这方面考虑更周到,如果他也不行,那估计是不行了

[/Quote]

用WinRar试过了,创建一个大于4G的自解压文件完成后,她弹出诊断信息提示框:
xxx.exe:自解压文件太大,Windows功能执行超过4GB的可执行文件。

MoXiaoRab 2009-10-27
  • 打赏
  • 举报
回复
没法寻址。单个PE最大3GB,还得再PE头部加上标志并为系统开通3GB开关
wltg2001 2009-10-27
  • 打赏
  • 举报
回复
32位系统最大的寻址空间也就是4G,在加载EXE文件时是利用内存映射文件来加载的,由于寻址空间的限制所以无法加载.
  • 打赏
  • 举报
回复
应该是无法加载超过4G的exe吧
ahao 2009-10-27
  • 打赏
  • 举报
回复
按理说,32位系统没法支持大于4g的
试试winrar吧,商业软件这方面考虑更周到,如果他也不行,那估计是不行了
shyboy_NWPU 2009-10-27
  • 打赏
  • 举报
回复
我用7z生成了一个大于4G的自解压文件,生成的自解压文件运行时也提示"xxx.exe不是有效的Win32程序"

问题似乎开始明朗了,或许32位Windows根本就不支持大于4G的单个可执行文件?
shyboy_NWPU 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ahao 的回复:]
你有没有试过winrar生成的自解exe?

[/Quote]

哦,对,这是个思路;我试一下
多谢点拨____
ahao 2009-10-27
  • 打赏
  • 举报
回复
你有没有试过winrar生成的自解exe?
ahao 2009-10-27
  • 打赏
  • 举报
回复
LZ真是高瞻远瞩,深谋远虑,在下佩服
zhouzhipen 2009-10-27
  • 打赏
  • 举报
回复
因为你的操作系统是32位的,CPU也是32位的.32位的数值表达范围最大为4G(0xffffffff).
比如操作系统要将这样的文件读入内存,那文件长度计数就是个问题.就算操作系统能在软件上解决这个问题.
在硬件上,32位的CPU的寄存器最大也只能表示到4G,指令地址寄存器也不能把你的文件表示完.
shyboy_NWPU 2009-10-27
  • 打赏
  • 举报
回复
PE文件头数据结构的IMAGE_OPTIONAL_HEADER中有个成员是DWORD SizeOfImage;
这个应该指的是这个PE文件的大小;

DWORD 是32位,能记录的最大值就是4G;
超过4G的,Windows在加载的时候会发现记录的大小与实际大小不一样,就认为文件已经损坏,于是报错



------------------------猜测而已,渴望高手指点
y_l_stone 2009-10-27
  • 打赏
  • 举报
回复
32位的原因,我想

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧