首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++程序的可执行文件也包含系统调用的对象代码吗?

C++程序的可执行文件也包含系统调用的对象代码吗?
EN

Stack Overflow用户
提问于 2015-07-12 11:53:15
回答 1查看 435关注 0票数 2

我们使用Linux系统调用,如fork()pthread()signal()等,在C或C++程序中进行编译,生成可执行文件(a.out)。现在,我怀疑文件a.out是否包含所使用的所有linux系统调用的目标代码,或者可执行文件是否只包含对系统函数的调用,以及系统调用函数是否在运行时被链接?假设我将我的a.out文件移到其他Linux操作系统上,它以不同的语法实现系统调用,并尝试编译它,它会工作吗?我怀疑系统调用函数定义是否是a.out文件的一部分?

EN

回答 1

Stack Overflow用户

发布于 2015-07-12 13:11:38

用户空间二进制文件不包含系统调用的实现。这意味着任何用户都可以将任何代码注入内核并接管系统。

相反,他们需要切换到内核模式,通过使用处理器中断或特殊指令。然后处理器可以从内核执行系统调用实现。

通常使用用户空间库(如libc ),它提供存根,将syscall的参数转换为适当的协议,并触发跳转到内核模式。它通常是动态链接的,因此这些存根也不会出现在可执行文件中。

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

https://stackoverflow.com/questions/31367477

复制
相关文章

相似问题

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