首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows系统调用

Windows系统调用
EN

Stack Overflow用户
提问于 2014-01-12 19:58:03
回答 1查看 21K关注 0票数 19

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

代码语言:javascript
运行
复制
movl        $0, %ebx
movl        $1, %eax
int $0x80   ; exit with code 0

我还使用这些系统调用从终端读取/写入字符(例如,在EAX中使用4写入syscall )。我想知道如何在Windows NT平台上做到这一点。有可能吗?我查看了this table,但我并不真正理解syscall的名称。欢迎任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 20:10:49

Nt*的函数集是没有文档的,这是有充分理由的:它是Windows的内部函数,并且在不同版本之间会发生变化,这意味着直接针对它的程序在不同版本之间崩溃的风险很高。

实际上,以公共的、有文档记录的函数为目标的开销并不大,只要您正确使用API,您就可以得到Microsoft的保证,即您的程序将在未来的Windows版本中运行。

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

更新

我假设这是为了实验或有趣,事实上,OP写道:

然而,

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

...I发现这种推理方式有问题,我不想充当此类开发实践的推动者,特别是在使用syscall执行控制台任务没有实际好处的情况下。

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

但作为起点,请参阅https://j00ru.vexillium.org/syscalls/nt/64/以获取按x64内核版本分解的Windows系统调用号的反向工程表。(不要在可移植代码中使用,仅用于实验,以满足您对Windows和/或asm如何工作的好奇心。)

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21074334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档