0

0

了解运行时:从 C 语言到现代语言

心靈之曲

心靈之曲

发布时间:2024-10-06 15:01:53

|

485人浏览过

|

来源于dev.to

转载

了解运行时:从 c 语言到现代语言

在现代软件开发和编程时代,术语“运行时”可能有不同的含义,具体取决于上下文和所讨论的语言。我在这里澄清这些差异,重点关注与 java 或 python 等更现代的语言相比,c 语言的运行时如何工作。我打算让这篇文章主要针对初学者程序员,因此我将避免深入研究复杂的概念。

什么是运行时?

运行时的核心是一个程序本身,它读取并执行开发人员编写的代码。但当一些开发人员使用 c 语言运行时时,就会感到困惑。

现代语言运行时

在java或python等语言中,运行时本身就是一个读取myfile.js文件的程序,这就是为什么你运行nodejs程序,例如:node myfile.js和v8引擎(是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
}


这看起来根本不像运行时,它只是编译器添加的一些汇编语言代码,因此开发人员不必这样做。

IMCart开源网店系统(外贸B2C)
IMCart开源网店系统(外贸B2C)

IMCart是目前国内首家最为完善的开源b2c商城系统。同时也是PAYPAL官方认证建站系统的金牌合作伙伴。系统支持多语言,多站点,移动端, 本地国际化,API对接等,丰富的营销功能跟完善的商品体系,优良的下单体验,更为符合SEO优化,完善的插件支持/模板中心更是让IMCART更加无法 替代。而IMCART全新的技术架构、全新的UI设计、丰富的促销体系、官方各项服务支持能从根源上解决了目前市面上一

下载

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 并且它在这方面非常棒。为什么要重新发明轮子,让我们用轮子创造一辆神奇的汽车,除非你不想在火星上驾驶它。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

443

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

544

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

73

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

396

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

396

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号