汇编程序中Fatal:No Program entry point错误的解决办法

本文介绍了使用Tasm编译器时遇到的“Fatal:NoProgram入口点”错误,并提供了具体的解决方案。通过对示例程序进行简单修改,即添加程序入口标签,解决了链接过程中的这一致命错误。

    不得不说,我觉得一本真正可以称得上是好的教材都应该像王爽老师写的《汇编语言》那样,不追求书有多厚,也不追求书的内容有多高深莫测,更不追求书有多么晦涩难懂,看起来有多么的高大上,而应该是用极其耐心的解释以及合理的逻辑结构为读者解惑。相比于现在很多所谓的入门级教材而言,这本书思路清晰,解释到位,因而绝对可以称得上是良心之作。

    今天在阅读到《汇编语言》这本书的第四章时,遇到了一个小小的问题,在此做一个简单记录。

    从本书的第四章开始,正式由散碎的单条指令转入整体化的汇编程序。按照我们学校的要求,我使用的编译器是Tasm,可能是因为王爽老师在编写这本书时使用的是Masm,因而在使用过程中出现了一点偏差,这也是产生这次我所描述的错误的根源。但是这个根源在程序里面是可以进行修改的。

    该例如下:编程运算2^3

assume cs:abc
abc segment
     mov ax,2
     mov ax,ax
     mov ax,ax
abc ends
end

    代码的具体解释在此不做过多解释,这里着重解释一下出现的错误

    首先,打开虚拟盒,进行一波编译链接前的常规操作:


在使用tasm.exe进行编译的时候没有发生问题,但是在使用tlink.exe进行链接的时候却歇菜了,报出的错误正是标题中的Fatal:No Program entry point。它的意思是没有程序入口,这个错误在Masm5中不会出现,但是Tasm却对此有严格要求,因此在不改变编译器的情况下,我们通过修改程序可以实现,只要给出程序入口就可以了。


我们对代码做如下修改,增加start和end start:

assume cs:abc
abc segment
start: mov ax,2
       mov ax,ax
       mov ax,ax
abc ends
end start
end
这样修改之后,问题就迎刃而解啦,出现warning:No stack表示链接成功


"D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\cl.exe" /Foc:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\.\CustomPattern.obj /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /Gs99999 /Ic:\edk2-udk2018\KtiBttPkg\KtiBtt /Ic:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG /Ic:\edk2-udk2018\MdePkg /Ic:\edk2-udk2018\MdePkg\Include /Ic:\edk2-udk2018\MdePkg\Include\X64 /Ic:\edk2-udk2018\KtiBttPkg /Ic:\edk2-udk2018\KtiBttPkg\Include c:\edk2-udk2018\KtiBttPkg\KtiBtt\CustomPattern.c cl: 命令行 warning D9025 :正在重写“/Gs32768”(用“/Gs99999”) CustomPattern.c "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\cl.exe" /Foc:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\.\KtiTest.obj /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /Gs99999 /Ic:\edk2-udk2018\KtiBttPkg\KtiBtt /Ic:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG /Ic:\edk2-udk2018\MdePkg /Ic:\edk2-udk2018\MdePkg\Include /Ic:\edk2-udk2018\MdePkg\Include\X64 /Ic:\edk2-udk2018\KtiBttPkg /Ic:\edk2-udk2018\KtiBttPkg\Include c:\edk2-udk2018\KtiBttPkg\KtiBtt\KtiTest.c cl: 命令行 warning D9025 :正在重写“/Gs32768”(用“/Gs99999”) KtiTest.c "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\cl.exe" /Foc:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\.\AutoGen.obj /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /Gs99999 /Ic:\edk2-udk2018\KtiBttPkg\KtiBtt /Ic:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG /Ic:\edk2-udk2018\MdePkg /Ic:\edk2-udk2018\MdePkg\Include /Ic:\edk2-udk2018\MdePkg\Include\X64 /Ic:\edk2-udk2018\KtiBttPkg /Ic:\edk2-udk2018\KtiBttPkg\Include c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\AutoGen.c cl: 命令行 warning D9025 :正在重写“/Gs32768”(用“/Gs99999”) AutoGen.c "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\lib.exe" /NOLOGO /LTCG /OUT:c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\KtiTest.lib @c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\object_files.lst "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\link.exe" /OUT:c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.dll /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:_ModuleEntryPoint /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data /WHOLEARCHIVE @c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\static_library_files.lst 正在生成代码 已完成代码的生成 LINK : warning LNK4281:x64 映像的基址 0x0 不适当;将基址设为 4 GB 以上以实现最佳 ASLR 优化 "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\link.exe" /OUT:c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.dll /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:_ModuleEntryPoint /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data @c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\static_library_files.lst 正在生成代码 已完成代码的生成 LINK : warning LNK4281:x64 映像的基址 0x0 不适当;将基址设为 4 GB 以上以实现最佳 ASLR 优化 "GenFw" -e UEFI_APPLICATION -o c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.efi c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.dll copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.efi c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT 已复制 1 个文件。 copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.efi c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiTest.efi 已复制 1 个文件。 copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\*.map c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.map 已复制 1 个文件。 copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\*.pdb c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\*.pdb 弦低痴也坏街付ǖ奈募? 迅粗? 0 个文件。 Traceback (most recent call last): Traceback (most recent call last): File "C:\Python27\lib\logging\__init__.py", line 882, in emit File "C:\Python27\lib\logging\__init__.py", line 882, in emit IOError: [Errno 0] Error IOError: [Errno 0] Error Logged from file build.py, line 248 Logged from file build.py, line 248 - Done - Build end time: 11:58:12, Aug.15 2025 Build total time: 00:00:02现在还有什么问题
08-16
C:\edk2_ori_ok>edk2\KtiBttPkg.bat C:\edk2_ori_ok>build -p KtiBttPkg\KtiBttPkg.dsc -a X64 -b RELEASE -m KtiBttPkg\KtiBtt\KtiTest.inf Build environment: Windows-10-10.0.26100-SP0 Build start time: 10:36:53, Aug.25 2025 WORKSPACE = c:\edk2_ori_ok PACKAGES_PATH = c:\edk2_ori_ok\edk2\;c:\edk2_ori_ok\edk2-libc EDK_TOOLS_PATH = c:\edk2_ori_ok\edk2\basetools EDK_TOOLS_BIN = c:\edk2_ori_ok\edk2\basetools\bin\win32 CONF_PATH = c:\edk2_ori_ok\edk2\conf PYTHON_COMMAND = py -3 Processing meta-data .Architecture(s) = X64 Build target = RELEASE Toolchain = VS2017 Active Platform = c:\edk2_ori_ok\edk2\KtiBttPkg\KtiBttPkg.dsc Active Module = c:\edk2_ori_ok\edk2\KtiBttPkg\KtiBtt\KtiTest.inf done! Generating code . done! Generating makefile . done! Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\DxeHobLib\DxeHobLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BasePciLibCf8\BasePciLibCf8.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BaseSynchronizationLib\BaseSynchronizationLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BasePciCf8Lib\BasePciCf8Lib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\SecPeiDxeTimerLibCpu\SecPeiDxeTimerLibCpu.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BaseIoLibIntrinsic\BaseIoLibIntrinsic.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdeModulePkg\Library\UefiHiiServicesLib\UefiHiiServicesLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\ShellPkg\Library\UefiShellLib\UefiShellLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\UefiFileHandleLib\UefiFileHandleLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdeModulePkg\Library\UefiHiiLib\UefiHiiLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdeModulePkg\Library\UefiSortLib\UefiSortLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\UefiLib\UefiLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\UefiDevicePathLib\UefiDevicePathLibOptionalDevicePathProtocol.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Uefi\Devices\daConsole.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Uefi\InteractiveIO\IIO.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Containers\ContainerLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\UefiBootServicesTableLib\UefiBootServicesTableLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\UefiRuntimeServicesTableLib\UefiRuntimeServicesTableLib.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Wchar\Wchar.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\UefiApplicationEntryPoint\UefiApplicationEntryPoint.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\UefiMemoryAllocationLib\UefiMemoryAllocationLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\DxePcdLib\DxePcdLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BaseLib\BaseLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BasePrintLib\BasePrintLib.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BaseMemoryLibRepStr\BaseMemoryLibRepStr.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Stdio\Stdio.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\LibC.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\BaseDebugLibNull\BaseDebugLibNull.inf [X64] Building ... c:\edk2_ori_ok\edk2\MdePkg\Library\RegisterFilterLibNull\RegisterFilterLibNull.inf [X64] Building ... c:\edk2_ori_ok\edk2\ShellPkg\Library\UefiShellCEntryLib\UefiShellCEntryLib.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\StdLib\StdLib.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\String\String.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Uefi\Uefi.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Uefi\Devices\daUtility.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Locale\Locale.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Time\Time.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\PosixLib\Gen\LibGen.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Ctype\Ctype.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\Signal\Signal.inf [X64] Building ... c:\edk2_ori_ok\edk2-libc\StdLib\LibC\gdtoa\gdtoa.inf [X64] Building ... c:\edk2_ori_ok\edk2\KtiBttPkg\KtiBtt\KtiTest.inf [X64] "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\link.exe" /OUT:c:\edk2_ori_ok\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.dll /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4281 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:_ModuleEntryPoint /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data /WHOLEARCHIVE @c:\edk2_ori_ok\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\static_library_files.lst fatal error C1007: ޷ʶı־-NoRTTI(ڡp2) LINK : fatal error LNK1257: ʧ NMAKE : fatal error U1077: "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\link.exe": ش롰0x4e9 Stop. build.py... : error 7000: Failed to execute command D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\nmake.exe /nologo tbuild [c:\edk2_ori_ok\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest] build.py... : error F002: Failed to build module c:\edk2_ori_ok\edk2\KtiBttPkg\KtiBtt\KtiTest.inf [X64, VS2017, RELEASE] - Failed - Build end time: 10:36:55, Aug.25 2025 Build total time: 00:00:02 C:\edk2_ori_ok>
最新发布
08-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值