运行用NASM编写的Win32应用程序会导致“此应用程序无法在您的PC上运行”错误

成功

我开始学习Windows上的x86汇编。我正在学习32位x86汇编。我使用nasmld来编译我的程序。我使用mingw32-makemakefile作为构建系统。我假设ldMinGW附带了它,但是我不确定。我所知道的是它已经在我的计算机上。

我想编译一个非常简单的程序,只是为了确保一切正常,当然不是。运行我的可执行文件时,出现一个巨大的蓝色框,上面写着“此应用程序无法在您的PC上运行”,并且在关闭通知后,这些字样会Access is denied打印到我的终端上。

这是我的程序:

global _main

_main:
  mov eax, 1
  ret

这是我的makefile:

main: learn.asm
    nasm -f win32 learn.asm -o learn.o
    ld learn.o -o learn.exe

有人可以帮我解决这个问题吗?

迈克尔·佩奇

最初,您的问题是关于_start用作入口点的。您的链接方式不包括C运行时。

在某些版本的Windows中,This app cant run on your pc如果.rdata在某些情况下没有(只读数据)部分,则与MinGW LD链接时可能会出现错误一种情况似乎是带有标头未引用.idata节(导入目录的可执行文件,并且不包含.rdata节。当不使用C运行时时,MinGW LD链接器根据您的代码创建可执行文件时,情况就是这样。要解决此问题,请添加.rdata至少包含一个字节数据的部分。这应该工作:

global _start

section .rdata
db 0

section .text
_start:
    mov eax, 1
    ret 

您还需要将代码放在该.text部分中,否则可能会遇到其他问题。然后,您可以组装并链接:

nasm -fwin32 learn.asm -o learn.obj
ld -o learn.obj -o learn.exe

如果要使用_main并打算使用C运行时,则不需要创建一个.rdata部分,但是可以使用以下命令进行汇编和链接:

nasm -fwin32 learn.asm -o learn.obj
gcc -m32 learn.obj -o learn.exe

我对链接的建议

或者,您可以使用与LD不同的链接器。GoLink特别应从您使用的代码生成可执行文件。您可以通过以下方式创建带有_start入口点的Win32控制台应用程序

nasm -fwin32 learn.asm -o learn.obj
golink /console /entry _start learn.obj

GoLink会生成一个带有适当头文件和节的可执行文件,Windows无需添加.rdata节即可运行。

如果您安装了MSVC / C ++,则还可以使用Microsoft链接器

nasm -fwin32 learn.asm -o learn.obj
link learn.obj /entry:start /subsystem:console

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试运行HTA会显示“此应用程序无法在您的PC上运行”

来自分类Dev

当构建cordova应用程序visual studio 2015时,“此应用程序无法在您的PC上运行!”

来自分类Dev

当构建cordova应用程序visual studio 2015时,“此应用程序无法在您的PC上运行!”

来自分类Dev

从Win32应用程序运行外部exe

来自分类Dev

在Win32应用程序中连续运行代码

来自分类Dev

IOException:无法运行程序:CreateProcess错误= 193,%1不是有效的Win32应用程序

来自分类Dev

IOException:无法运行程序:CreateProcess错误= 193,%1不是有效的Win32应用程序

来自分类Dev

Windows 8.1无法从cmd或Powershell提示符启动Powershell-“此应用程序无法在您的PC上运行”

来自分类Dev

应用程序无法在Windows 2003中以Win32模式运行

来自分类Dev

应用程序无法在Windows 2000中以WIN32模式运行

来自分类Dev

应用程序无法在Windows 2003中以Win32模式运行

来自分类Dev

EXE不是有效的Win32应用程序,但在64位上运行

来自分类Dev

VBoxManage-该应用程序无法在您的PC上运行

来自分类Dev

Git rebase错误:此应用程序将无法在您的计算机上运行

来自分类Dev

什么会导致语言栏在Win32应用程序中消失?

来自分类Dev

无法在Windows 2012 R2上安装JDK 7u51(64位)“此应用程序无法在您的PC上运行”

来自分类Dev

java.io.IOException:无法运行程序“:CreateProcess错误= 193,%1不是有效的Win32应用程序

来自分类Dev

Visual Studio:“不是 Win32 应用程序”错误

来自分类Dev

Ubuntu上的Grails无法运行应用程序。摇篮错误

来自分类Dev

关闭后,Win32应用程序仍在后台运行

来自分类Dev

如何在特定的本地时间运行Delphi Win32应用程序?

来自分类Dev

无法运行应用程序

来自分类Dev

在AVD上收到消息“除非您更新Google Play服务,否则此应用程序将无法运行”

来自分类Dev

如果未关闭应用程序(在后台运行),是否会导致应用程序崩溃?

来自分类Dev

如何在PC上运行iOS或Android应用程序?

来自分类Dev

运行应用程序时使用multer导致错误

来自分类Dev

运行应用程序,它在Android中显示此错误

来自分类Dev

错误:“此应用程序只能在应用程序容器的上下文中运行。”

来自分类Dev

用Nuitka编译任何Python程序后,我得到“不是有效的win32应用程序”错误

Related 相关文章

  1. 1

    尝试运行HTA会显示“此应用程序无法在您的PC上运行”

  2. 2

    当构建cordova应用程序visual studio 2015时,“此应用程序无法在您的PC上运行!”

  3. 3

    当构建cordova应用程序visual studio 2015时,“此应用程序无法在您的PC上运行!”

  4. 4

    从Win32应用程序运行外部exe

  5. 5

    在Win32应用程序中连续运行代码

  6. 6

    IOException:无法运行程序:CreateProcess错误= 193,%1不是有效的Win32应用程序

  7. 7

    IOException:无法运行程序:CreateProcess错误= 193,%1不是有效的Win32应用程序

  8. 8

    Windows 8.1无法从cmd或Powershell提示符启动Powershell-“此应用程序无法在您的PC上运行”

  9. 9

    应用程序无法在Windows 2003中以Win32模式运行

  10. 10

    应用程序无法在Windows 2000中以WIN32模式运行

  11. 11

    应用程序无法在Windows 2003中以Win32模式运行

  12. 12

    EXE不是有效的Win32应用程序,但在64位上运行

  13. 13

    VBoxManage-该应用程序无法在您的PC上运行

  14. 14

    Git rebase错误:此应用程序将无法在您的计算机上运行

  15. 15

    什么会导致语言栏在Win32应用程序中消失?

  16. 16

    无法在Windows 2012 R2上安装JDK 7u51(64位)“此应用程序无法在您的PC上运行”

  17. 17

    java.io.IOException:无法运行程序“:CreateProcess错误= 193,%1不是有效的Win32应用程序

  18. 18

    Visual Studio:“不是 Win32 应用程序”错误

  19. 19

    Ubuntu上的Grails无法运行应用程序。摇篮错误

  20. 20

    关闭后,Win32应用程序仍在后台运行

  21. 21

    如何在特定的本地时间运行Delphi Win32应用程序?

  22. 22

    无法运行应用程序

  23. 23

    在AVD上收到消息“除非您更新Google Play服务,否则此应用程序将无法运行”

  24. 24

    如果未关闭应用程序(在后台运行),是否会导致应用程序崩溃?

  25. 25

    如何在PC上运行iOS或Android应用程序?

  26. 26

    运行应用程序时使用multer导致错误

  27. 27

    运行应用程序,它在Android中显示此错误

  28. 28

    错误:“此应用程序只能在应用程序容器的上下文中运行。”

  29. 29

    用Nuitka编译任何Python程序后,我得到“不是有效的win32应用程序”错误

热门标签

归档