Windows系统调用

Dis*_*kai 14 windows assembly

我对使用Linux上的系统调用进行汇编(非常)有基本的了解(我使用GNU汇编程序as).在Windows 7上,我使用GCC编译器套件的MinGW(32位)端口来生成汇编程序.在Linux上我经常使用C库在我的汇编程序中进行一些操作系统交互,在我的Windows平台上,使用MinGW也可以很好地工作.但是,有时我想使用低级系统调用 - 主要是为了使我的可执行文件尽可能小.在Linux上我知道如何做到这一点:

movl        $0, %ebx
movl        $1, %eax
int $0x80   ; exit with code 0
Run Code Online (Sandbox Code Playgroud)

我还使用这些系统调用来读取/写入终端的字符(例如,在EAX中编写带有4的系统调用).我想知道如何在Windows NT平台上执行此操作.可能吗?我查看了这个表,但我真的不明白系统调用的名称.欢迎任何帮助.

Dai*_*Dai 10

Nt*组函数没有记录,原因很简单:它是Windows的内部版本,也是版本之间的变化,这意味着直接针对它的程序在Windows版本之间存在高风险.

实际上,针对公共的,记录的功能并没有那么大的开销,并且如果您正确使用API ,您可以获得Microsoft保证您的程序可以与未来版本的Windows一起使用.

因此,我不会为您提供您想要的答案.我强烈建议您使用公共控制台API:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073%28v=vs.85%29.aspx

更新

看来我的答案很有争议(14票,9票)!截至2017年3月下旬,这个答案有4个赞成票,但有6个赞成票.我会捍卫自己的立场,说OP没有说清楚这是为了实验还是有趣,实际上他写道:

但是,有时我想使用低级系统调用 - 主要是为了使我的可执行文件尽可能小.

...我发现这种推理方式存在问题,我不想充当这些开发实践的推动者,特别是因为使用系统调用来实现控制台任务没有实际好处.我没有直接回答这个问题是不是真的是正确的,而我对"串联SQL"问题的回答也没有给OP他们想要的东西,但是告诉他们使用参数化并且相当强烈地投票?

如果有人想知道如何在Windows中使用低级系统调用,那么请发布一个新问题,适当的框架,我很乐意回答它.

  • -1,许多玩内部人员的人只是为了娱乐/研究/学习,而不是因为他们计划开发可释放的软件. (7认同)
  • 我只是在使用汇编代码,这就是全部 - 对于这些小型实验来说,便携性对我来说并不重要;)但是,谢谢,你的建议非常有用我肯定会记下+1**编辑:**我假设使用带有我正在使用的MinGW端口的C库是公共控制台API的有效替代方案吗? (5认同)
  • 我应该强调的是,当我发布我的问题时,这绝对是我需要回答的答案,即使它只是为了好玩,我支持戴的关于此事的立场.我的问题当然可以更清楚了 - 我在14年左右是一个新手,并没有意识到简洁和问题的重要性 - 所以也许这个问题可以编辑以更清楚地反映这一点?人们似乎时不时地偶然发现这个问题,我可以看到目前的状况如何导致混乱. (3认同)