【linux】helloword原理分析及实战
前言
- hello word
- 著名演示程序,哈哈
- 下面在 arm linux 下展示一下hello world,便开始入门 arm linux 程序篇。
- 以下学习基于 NXP 的 IMX6 平台。
linux中hello word原理
- 简要步骤
- gcc 编译,编译成功后得出可执行文件 armHelloWord(该名字根据用户定义而不同)
- 预处理
- 编译
- 汇编
- 链接
- 链接分为两种
- 动态链接
- 静态链接
- 链接分为两种
- 控制台运行可执行文件
./armHelloWord- linux kernel
- Shell 会创建一个新的进程来执行该程序。
- 使用 fork() 函数创建一个新的进程。
- 往新的进程中添加需要执行的程序 armHelloWord
- 使用 exeve() 函数往新的进程里添加运行程序
- sys_execve() 函数为 linux 系统调用,被 exeve() 函数调用
- 这里的系统调用可以理解为是操作系统系统开放给用户的最底层接口
- do_exeve() 函数是 sys_execve() 函数的核心。
- load_elf_binary() 函数会去文件系统中读取 armHelloWord 程序到内存,然后判断它是否是动态链接的可执行程序,如果不是,则进一步判断是否是静态链接的文件。
- Shell 会创建一个新的进程来执行该程序。
- glibc 库相关
- ld-linux-xx.so 是 glibc 库中的动态连接器。(动态库)
- 如果 armHelloWord 程序是 动态链接 程序,该动态链接器会去加载共享库,并完成共享库和程序的链接工作, 然后准备真正开始执行hell程序。
- 如果 armHelloWord 程序是 静态链接 程序,则无需再加载链接共享库,直接开始准备执行 armHelloWord 程序。
- 程序的真正入口 _start
- 该符号在glibc中
- 执行用户程序前进行一些初始化 __libc_start_main()
- 该符号也是glibc中的函数
- 调用用户程序中的 mian() 函数,开始执行 printf 打印函数。
- 程序执行完了之后,调用glibc库中的 _exit() 函数,来结束当前进程。
- ld-linux-xx.so 是 glibc 库中的动态连接器。(动态库)
- linux kernel
- gcc 编译,编译成功后得出可执行文件 armHelloWord(该名字根据用户定义而不同)
hello word 实战
- helloword.c 源码很简单
/** @file helloword.c
* @brief 简要说明
* @details 详细说明
* @author lzm
* @date 2020-11-07 11:50:53
* @version v1.0
* @copyright Copyright By lizhuming, All Rights Reserved
*
**********************************************************
* @LOG 修改日志:
**********************************************************
*/
#include <stdio.h>
int main(void)
{
printf("hello word! This is a first program.\n");
return 0;
}
学习参考
- 野火
【linux】helloword原理分析及实战的更多相关文章
- 2019-2020-1 20199303 《Linux内核原理分析》 第一周作业
2019-2020-1 20199303 <Linux内核原理分析> 第一周作业 1. 环境准备 在众多的Linux发行版中,Ubuntu,小红帽还有类Unix系统的BSD系统,我选择了目 ...
- linux中断处理原理分析
Tasklet作为一种新机制,显然可以承担更多的优点.正好这时候SMP越来越火了,因此又在tasklet中加入了SMP机制,保证同种中断只能在一个cpu上执行.在软中断时代,显然没有这种考虑.因此同一 ...
- 【Java编程实战】Metasploit_Java后门运行原理分析以及实现源码级免杀与JRE精简化
QQ:3496925334 文章作者:MG1937 CNBLOG博客ID:ALDYS4 未经许可,禁止转载 某日午睡,迷迷糊糊梦到Metasploit里有个Java平台的远控载荷,梦醒后,打开虚拟机, ...
- 20169212《Linux内核原理与分析》课程总结
20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业
2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...
随机推荐
- Prometheus 系列开篇:为什么要学 Prometheus ?
「Prometheus 系列开篇:为什么要学 Prometheus ?」首发于[陈树义]公众号,点击跳转到原文https://mp.weixin.qq.com/s/HCS6X3l6nVBw_hAnd6 ...
- 蒲公英 · JELLY技术周刊 Vol.25 · Webpack 5 正式发布,你学废了么
蒲公英 · JELLY技术周刊 Vol.25 阔别两年,Webpack 5 正式发布了,不仅清理掉很多冗余的功能,同样也为我们带来了很多新鲜的能力,不论是默认开启的持久缓存,还是反病毒保护,亦或者被其 ...
- 0-完全开源的 Vue.js 入门级教程:HelloVue,发车啦!
本教程基于 Vue.js 2.x 作者:HelloGitHub-追梦人物 欢迎来到 HelloVue-todo-tutorial,这个教程将手把手教你从零开始使用 Vue 搭建一个 Todo(待办事项 ...
- Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警
文章首发于[陈树义]公众号,点击跳转到原文:https://mp.weixin.qq.com/s/56S290p4j9KROB5uGRcGkQ Prometheus UI 提供了快速验证 PromQL ...
- day42 Pyhton 并发编程05
一.内容回顾 # 线程 # 正常的编程界: # 进程 # 计算机中最小的资源分配单位 # 数据隔离 # 进程可以独立存在 # 创建与销毁 还有切换 都慢 给操作系统压力大 # 线程 # 计算机中能被C ...
- selenium原理学习笔记
一,selenium工作原理(参考文档:https://blog.csdn.net/dawei_yang000000/article/details/87639928) 自动化测试代码发送请求给到浏览 ...
- scp远程上传
scp -P 22 /Users/mac/Downloads/VBoxGuestAdditions_5.2.12.iso root@192.168.1.210:/usr/local/src s ...
- composer 阿里云加速 转
阿里云 Composer 全量镜像 本镜像与 Packagist 官方实时同步,推荐使用最新的 Composer 版本. 最新版本: 1.10.8 下载地址: https://mirrors.aliy ...
- centos8平台给sudo配置日志
一,sudo日志的用途: 我们可以记录下来用户账号在哪个时间进行过sudo 这样不需要再从secure日志中查找用户的sudo记录 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://w ...
- centos8平台使用dnf/yum管理软件包
一,dnf的用途 centos7开始,DNF 成为了默认的软件包管理器,同时 yum 仍然是可用的 DNF包管理器克服了YUM包管理器的一些瓶颈,提升了用户体验,内存占用,依赖分析,运行速度等方面 D ...
