出于教育目的,我试图在Windows上从不依赖于标准C库或Windows DLL的汇编代码中创建一个(32位)exe。
我可以创建一个开始运行的程序(并且可以使用gdb进行调试),但是我不确定如何干净地退出该程序。所有教程都链接到标准C库并定义了main
函数,或使用DLL中定义的ExitProcess
WinAPI调用。
在32位Linux上,我将在int 0x80
系统调用中使用exit
指令。显然,Windows没有有意义地实现这些中断。
那么,有没有办法从我的程序中干净地返回?
答案 0 :(得分:1)
Windows与所有(传统)system calls类似,有一些operating systems。阅读Operating Systems: Three Easy Pieces,以了解有关操作系统的更多信息。
但是Microsoft Windows是专有软件。 Microsoft没有提供系统调用接口的文档,该接口可能特定于特定版本,因此您需要花费大量时间进行反向工程。另请参见this。
人们已经进行了逆向工程并将结果发布在https://j00ru.vexillium.org/syscalls/nt/32/。
因此可以直接进行系统调用,但是除了在您自己的桌面上进行学习实验(不适用于您分发的可执行文件)之外,这非常不切实际。
所需的另一部分实际上是不可能的,避免将任何DLL加载/映射到进程的虚拟地址空间中。