是否可以通过汇编代码创建Windows exe,而无需链接到c库并且不使用ExitProcess()?

时间:2018-08-08 07:15:52

标签: windows assembly system-calls static-linking portable-executable

出于教育目的,我试图在Windows上从不依赖于标准C库或Windows DLL的汇编代码中创建一个(32位)exe。

我可以创建一个开始运行的程序(并且可以使用gdb进行调试),但是我不确定如何干净地退出该程序。所有教程都链接到标准C库并定义了main函数,或使用DLL中定义的ExitProcess WinAPI调用。

在32位Linux上,我将在int 0x80系统调用中使用exit指令。显然,Windows没有有意义地实现这些中断。

那么,有没有办法从我的程序中干净地返回?

1 个答案:

答案 0 :(得分:1)

Windows与所有(传统)system calls类似,有一些operating systems。阅读Operating Systems: Three Easy Pieces,以了解有关操作系统的更多信息。

但是Microsoft Windows是专有软件。 Microsoft没有提供系统调用接口的文档,该接口可能特定于特定版本,因此您需要花费大量时间进行反向工程。另请参见this

人们已经进行了逆向工程并将结果发布在https://j00ru.vexillium.org/syscalls/nt/32/

因此可以直接进行系统调用,但是除了在您自己的桌面上进行学习实验(不适用于您分发的可执行文件)之外,这非常不切实际。

所需的另一部分实际上是不可能的,避免将任何DLL加载/映射到进程的虚拟地址空间中。