在现代软件开发和编程时代,术语“运行”可能有不同的含义,这取决于上下文和讨论的语言。我在这里澄清这些差异,重点关注它们 java 或 python 与更现代的语言相比,c 如何在语言运作中工作。我打算让这篇文章主要针对初学者程序员,所以我会避免深入研究复杂的概念。
运行时是什么?操作的核心是程序本身,它读取并执行开发人员编写的代码。但当一些开发人员使用它时 c 当语言运行时,你会感到困惑。
当现代语言运行时在java或python等语言中,操作本身就是读myfilele.js文件程序,这就是为什么你运行nodejs程序,例如:node myfile.javascript发动机是javascript发动机,它分析并执行javascript代码。)管理一切,无论你创建一个新文件,启动一个子过程等,最重要的是你不能做任何事情 v8 不允许你做的事。 但是当你运行C程序时,你不需要执行C程序 myfile.c,您只需编译一次,现在您不再需要gcc,直接操作即可。
c“运行时”在 c 中,没有像 java 或 python 与代码一起运行的单独程序。相反,C“运行时”实际上是编译过程中添加的一组静态插入代码和指令。它是最终二进制文件中包含的最小指令集,用于处理 cpu/操作系统级别的一些必要任务。其处理函数调用的堆栈帧创建和拆卸(在汇编中使用) push、pop、call、ret 等指令)。即便如此,你也可以通过使用内联汇编来提供自己 __start 覆盖函数,使开发人员能够完全控制程序的入口点和初始化。
void __start() { // custom entry point, no standard library initialization // you have no access to argc and argv here unless you access them manually from registers // you can create you own custom stack setup, initialization and etc here. // exit directly using a syscall asm("mov $60, %rax; mov $0, %rdi; syscall"); // exit(0) syscall }
这看起来不像运行时,它只是编译器添加的一些汇编语言代码,所以开发人员不必这样做。
c的权力和责任在 c 在语言中,您可以使用内联汇编直接呼叫系统,以操作系统通常不允许的方式与内核交互,这是创建恶意软件的方式。内联汇编允许开发人员在那里 c 编写代码中的汇编语言指令。这通常用于访问特定硬件功能的关键性能代码或特定硬件功能。
c 中国内联汇编- 内联汇编允许开发人员进行内联汇编 c 编写代码中的汇编语言指令。这通常用于访问特定硬件功能的关键性能代码或特定硬件功能。
- 它提供了直接执行cpu指令的方法。
- 使用内联汇编,程序员可以直接调用系统,而无需通过更高级别的库。
- 例如,我们可以使用内联汇编为系统调用设置适当的参数寄存器,然后触发它。
- 由于内联汇编允许对系统资源进行低级控制,因此可以用来绕过安全机制或直接操作内核。这是恶意软件执行未经授权的操作,如访问受保护的内存、拦截系统调用或操作过程及其内存。
- 恶意软件可以利用操作系统中的漏洞或这些低级交互来执行键盘记录、权限升级或秘密操作。
linux c中有一个flag,允许您直接将文件数据写入存储设备,绕过一些内核缓存机制,称为o_direct标志,与open和write系统调用相结合。该标志确保数据不在 ram 内核空间中的中缓冲或管理将直接将数据写入硬盘,jvm 不允许你这样做,这只是一个简单的例子。 这是一个简单的例子:
asm volatile ( "syscall" : "=a" (written) : "0" (1), "D" (fd), "S" (buffer), "d" (BLOCK_SIZE) : "rcx", "r11", "memory" );
*注意:* (writing) 是在 main() (1)内部创建的变量 是 write 系统调用号,(fd) 是文件将被写入的位置,即 int fs = open("path .log",o_wronly; (block_size) 是另一个变量名。它比那更复杂。
运行时的演变重要的是要了解运行时的概念多年来一直在发展。 70 年代的 c“运行时”和我们在一起 2000 时代语言中看到的强大运行环境非常不同。在讨论操作时,这种演变可能会导致混乱,特别是在熟悉不同编程时代的开发人员之间。
结论我认为人们现在正在思考 1970 运行时间和年代 2000 比较时代的运行,让新开发人员和老开发人员感到困惑。 任何编程语言的主要任务都是解决具体问题,你不想使用它 c 写一个完整的框架来创建 api,我们有 nodejs,它很好,你不需要用 javascript 写裸机代码,因为我们已经有了 c 而且在这方面很棒。为什么要重新发明轮子,让我们用轮子创造一辆神奇的汽车,除非你不想在火星上驾驶它。
以上是对操作的理解:从 C 从语言到现代语言的详细内容,请关注图灵教育的其他相关文章!