我用DUMPBIN转储了一个WindowsSDK.lib文件(kernel32.lib),输出显示每个API名称都有两个“版本”,例如:_imp_ExitProcess@4和_ExitProcess@4那么,为什么会有两个相同但名称不同的重整?.假设我想从NASM调用ExitProcess,当声明EXTERN时我应该使用它们中的哪一个?我的实践告诉我,我可以调用它们中的任何一个,但我不知道哪个是“正确的”或“首选的”坚持下去。 最佳答案 我认为_imp_版本旨在与VisualC++编译器上的__declspec(dllimport)
我正在尝试学习如何在汇编中调用操作系统函数,并得到了一个示例,该示例将创建并关闭一个文件(在关闭时删除该文件)。在研究ExitProcess的用法时,我遇到了一些清理堆栈的示例,有些则没有;更令人困惑的是,不管有没有清理步骤,事情似乎都能正常工作……在这种情况下处理堆栈的正确方法是什么?externCloseHandle:procexternCreateFileA:procexternExitProcess:procincludeFileAccess.incincludeFileDisposition.incincludeFileFlag.incincludeFileShare.inc
这个问题在这里已经有了答案:Makeaprogramusingonlysystem-callsnotwindowsdll's[duplicate](1个回答)关闭4年前。出于教育目的,我正在尝试使用不依赖于标准C库或WindowsDLL的汇编代码在Windows上创建一个(32位)exe。我可以创建一个开始运行的程序(并且我可以使用gdb进行调试)但是我不确定如何干净地退出该程序。所有教程要么链接到标准C库并定义main函数,要么使用在DLL中定义的ExitProcessWinAPI调用。在32位Linux上,我会将int0x80指令与exit系统调用一起使用。显然,Windows没有
我不知道如何更好地提出这个问题,但为什么会这样:callExitProcess做同样的事情吗?moveax,ExitProcessmoveax,[eax]calleax我认为这些是等价的:callExitProcessmoveax,ExitProcesscalleax 最佳答案 从DLL导入代码时,符号ExitProcess实际上不是退出进程的代码地址(它是地址的地址)。因此,在那种情况下,您必须取消引用它才能获得实际的代码地址。这意味着您必须使用:call[ExitProcess]调用它。例如,thislocation处有一些代码