.exe在64位Windows中没有.bss节不能运行吗?

问题描述

当我发现某些旧程序无法在现代Windows下运行时,我遇到了这个问题。

这是一个通过mingw64构建的微型示例

.text
.global start
start:
subq $0x48,%rsp
xorl %ecx,%ecx
call *__imp_ExitProcess(%rip)
addq $0x48,%rsp
ret

gcc a.s -nostdlib -nostartfiles -lkernel32 -Wl,-e,start,-s

一个消息框显示,当我打开该exe程序时,它不是有效的Win32程序。但是,当我添加.lcomm a,1

时,程序成功运行
.bss
.int 0

到源文件,都有效地将.bss节插入exe文件。添加.data节不能解决问题。

这是Windows的固有限制还是ld内部的错误?

编辑: 好。我发现许多没有.bss的exe文件或带有未初始化数据的任何节,但是运行良好。但这并不能完全回答我的问题。为什么只有.data,.text和.idata的程序无法运行?

编辑V2: 我想我找到了原因。 OptionalHeader.SizeOfImage的值不正确。将其更改为正确的值可以解决该问题。因此,这很可能是ld中的错误。

解决方法

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...