微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决.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 举报,一经查实,本站将立刻删除。