我对Linux上使用系统调用(我使用GNU汇编程序)的汇编有一个(非常)基本的理解。 在Windows 7上,我使用GCC编译器套件的MinGW(32位)端口来生成汇编程序。 在Linux上,我经常在我的汇编程序中使用C库进行一些操作系统交互,而在我的Windows平台上,使用MinGW也能很好地工作。 然而,有时候,我想要使用底层的系统调用 – 主要是为了让我的可执行文件尽可能小。 在Linux上,我知道如何做到这一点:
movl $0, %ebx movl $1, %eax int $0x80 ; exit with code 0
我还使用这些系统调用来读写terminal上的字符(例如在EAX中用4写入系统调用)。 我想知道如何在Windows NT平台上做到这一点。 可能吗? 我看了看这个表 ,但是我不太了解系统调用的名字。 任何帮助是受欢迎的。
Nt*
函数集没有文档,有很好的理由:它是Windows内部的版本之间的变化,意味着直接针对它的程序在Windows版本之间有很高的风险。
实际上,针对公共的,有文档记录的功能并没有那么大的开销,而且如果您正确使用API,则可以确保您的程序能够与未来版本的Windows一起工作。
出于这个原因,我不会给你提供你想要的答案。 强烈建议您使用公共控制台API: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms682073%28v=vs.85%29.aspx
看来我的回答颇有争议! 截至2017年3月下旬,这个答案有4个投票,但有6个投票。 我会捍卫我的立场,说OP没有说清楚这是为了实验还是好玩,他的确写道:
然而,有时候,我想要使用底层的系统调用 – 主要是为了让我的可执行文件尽可能小。
…我觉得这种推理是有问题的,我不想为这些开发实践提供支持,特别是因为使用系统调用来控制台任务没有实际的好处。 是不是直接回答了这个问题,而我的答案是“SQL by concatenation”问题也没有给OP提供他们想要的东西,而是告诉他们使用参数化,并且相当强烈地回答了这个问题。
如果有人想知道如何在Windows中使用低级别的系统调用,那么请发布一个新的问题,适当的框架,我很乐意回答。