Windows是否相当于pause()系统调用?

Windows是否相当于pause()系统调用?,windows,assembly,system-calls,Windows,Assembly,System Calls,我想创建一个最小的Windows可执行文件,它什么也不做,并且大小最小 我所关心的只是在任务管理器中保留一个流程条目 在Linux上,这非常简单(只需要2条汇编指令就可以使用pause 系统调用)。如何在Windows上实现类似的结果 我试图将可执行文件的大小保持在最小,我不想让10kB的可执行文件实际上什么都不做 有没有一种方法可以在装配中实现这一点?正如我所提到的,我不希望仅仅为了使流程“挂起”而包含大型库。正如Hans在评论中所建议的,睡眠(无限)可能是最简单的非忙等待。但是,这确实意味着

我想创建一个最小的Windows可执行文件,它什么也不做,并且大小最小

我所关心的只是在任务管理器中保留一个流程条目

在Linux上,这非常简单(只需要2条汇编指令就可以使用
pause
系统调用)。如何在Windows上实现类似的结果

我试图将可执行文件的大小保持在最小,我不想让10kB的可执行文件实际上什么都不做


有没有一种方法可以在装配中实现这一点?正如我所提到的,我不希望仅仅为了使流程“挂起”而包含大型库。

正如Hans在评论中所建议的,
睡眠(无限)
可能是最简单的非忙等待。但是,这确实意味着您必须使用任务管理器终止流程以停止它

如果需要多次启动/停止此过程,则调用
MessageBox
然后调用
ExitProcess
可能不会那么烦人

如果你不使用CRT(<代码> Win MauncTestStudio,并用<代码> /ZL和

编译),你可以用Visual C++将它降到1 Kib。
通过汇编,您可以使它稍微小一些,但它可能不值得。

foo:jmp foo
?@melpomene这是一个繁忙的等待
pause()
是一个系统调用,它会在信号到达之前暂停进程。
Sleep(INFINITE)
也不需要很多代码。不幸的是,WinAPI在很大程度上被定义为用户模式库函数。例如,
sleep
是一个内核32函数,使用
ZwDelayExecution
(也称为
NtDelayExecution
),在我的系统上作为
mov r10,…/mov eax,31/syscall
。后者与Linux最接近,但并不等同(不可移植)。正如Anders在其回答中所说,您可以简单地使用任何编译器调用
sleep
,并依靠构建后工具剥离未使用的元数据和/或收缩PE部分。这些练习并不特别值得。在现实世界中,没有人创建什么都不做的可执行文件,因此这些工具没有针对它进行优化。没有人关心将不做任何事情的可执行文件变小,因为没有人关心不做任何事情的可执行文件。包括库是因为您需要它们多次提供的功能,而且它们比自己编写所有函数更方便。当然,有很多方法可以编写一些小的可执行程序,但是为一个什么都不做的程序编写答案是不值得的<代码>暂停也有自己的问题。