相关疑难解决方法(0)

没有汇编的C/C++函数定义

我一直认为printf()在最后一步中使用内联汇编定义函数.在stdio.h的内部深处埋藏了一些asm代码,它实际上告诉CPU要做什么.例如,在dos中,我记得它是通过首先mov将字符串的开头添加到某个内存位置或寄存器而不是调用intterupt来实现的.

但是,由于Visual Studio的x64版本根本不支持内联汇编程序,因此我想知道在C/C++中根本不会有汇编程序定义的函数.库函数如何printf()在不使用汇编代码的情况下在C/C++中实现?什么实际执行正确的软件中断?谢谢.

c++ inline-assembly

70
推荐指数
5
解决办法
9493
查看次数

系统调用是应用程序/用户程序请求操作系统服务来执行特权操作的唯一方式吗?

尽管我知道这个主题的范围要广泛得多,但我处于 Linux 环境中

假设我正在编写一个简单的 C 程序,并且想向终端写入“Hello”。显而易见的方法是使用 C 标准库 printf,它又使用 write 系统调用(包装函数而不是系统调用本身),而 write 系统调用又调用实际的汇编系统调用指令(或 int)。不太明显的方法是在我的 C 源文件中使用一些内联汇编,或者直接创建一个包含系统调用指令的汇编文件。

我的问题

  1. 似乎在一天结束时,我们以某种方式结束了系统调用(指令 syscall 或 int)。这是唯一的方法吗?

  2. 在现代 PC 中,术语“应用程序”与“用户程序”的含义相同吗?

  3. 我编写的 PowerPoint、Google Chrome、Visual Studio Code、Photoshop 或 C 程序都是需要系统调用来请求操作系统服务以执行写入文件等特权操作的应用程序/用户程序的示例,这样说是否正确?

linux assembly system-calls usermode kernel-mode

1
推荐指数
1
解决办法
248
查看次数