首页 > 系统相关 >Linux内核期末复习

Linux内核期末复习

时间:2023-06-13 14:45:00浏览次数:54  
标签:调用 const 复习 char 参数 result Linux execve 内核

1、P22-25

2、P36、P165

ret指令的作用:

进程切换时用什么函数

 

_switch_to_函数如何理解 怎么实现

 

 

3、gcc、gdb命令

 

gdb

 

堆栈汇编典型示例:

 

反汇编指令:

 

 

4、内嵌汇编(10号系统调用)

#include <stdio.h>

int main() {
    long result;
    long syscall_number = 10; // 10号系统调用的编号
    long arg1 = 1; // 参数1
    long arg2 = 2; // 参数2

    asm volatile (
        "mov %1, %%rax\n\t"    // 将系统调用号存入寄存器rax
        "mov %2, %%rdi\n\t"    // 将参数1存入寄存器rdi
        "mov %3, %%rsi\n\t"    // 将参数2存入寄存器rsi
        "syscall\n\t"          // 进行系统调用
        "mov %%rax, %0\n\t"    // 将返回值存入变量result
        : "=r" (result)         // 输出操作数:返回值存入result
        : "r" (syscall_number), "r" (arg1), "r" (arg2) // 输入操作数:系统调用号、参数1、参数2
        : "%rax", "%rdi", "%rsi" // 受影响的寄存器
    );

    printf("Result: %ld\n", result);
    return 0;
}

 

 

5、fork()系统调用

 

 

0、1、2号进程

 

fork()内核机制

 

execve函数

 

int execve(const char *filename, char *const argv[], char *const envp[]);

其中,argv[]是一个以NULL结尾的字符串数组,用于传递命令行参数给新程序。每个字符串元素都是一个命令行参数,第一个元素通常是可执行文件的名称。

envp[]是一个以NULL结尾的字符串数组,用于传递环境变量给新程序。每个字符串元素都是一个环境变量,形如"key=value"的格式。

#include <unistd.h>

int main() {
    char *const argv[] = { "program", "arg1", "arg2", NULL };
    char *const envp[] = { "VAR1=value1", "VAR2=value2", NULL };

    execve("/path/to/program", argv, envp);

    // execve函数执行成功后,下面的代码不会被执行到,
    // 因为进程已经被替换为新程序。
    // 如果execve函数执行失败,会返回-1,并根据errno设置相应的错误码。

    return 0;
}

 

 

6、ELF

 

怎么映射到内存:

使用execve系统调用

 

 

符号表、重定位

 

 

7、

  

 

 

8、

 

标签:调用,const,复习,char,参数,result,Linux,execve,内核
From: https://www.cnblogs.com/wxk1213/p/17477446.html

相关文章

  • Linux(centos 7.5)安装Jenkins
    文章目录一、Jenkins软件安装1、Jenkins需要依赖JDK,所以先安装JDK1.82、Linux安装Gitlab3、下载Jenkins安装包4、安装Jenkins5、修改Jenkins配置6、启动Jenkins二、Jenkins简单配置1、打开浏览器访问2、获取并输入admin账户密码3、跳过插件安装4、添加一个管理员账户,并进入Jenkin......
  • Linux开机过程
    1.Linux开机时,会首先创建0号进程,0号进程会创建出1号和2号进程,然后0号进程本身会终止。2.1号进程(sbin/init)是所有用户进程的祖先,需要开机自启的进程可以挂在一号进程下,1号进程会再产生tty/pts终端,之后会再由该终端产生login,shell等3.2号进程是所有系统进程的祖先。4.另外,开机......
  • Linux 文件检索 | locate、grep、find
    Linux中查找文件或关键词检索文件内容是很常用的功能合理使用命令,高效检索需要的结果本文系统AmazonLinux2locate通常locate命令系统会自带,如果没有则需要安装mlocatelocate搜索文件速度很快,因为它不去实际目录中找文件,而是在文件数据库对应的文件中直接查找。数据......
  • oracle linux 7.9 静默安装oracle 11g
    搭建虚拟机步骤配置ip,步骤省略。 下载linux版本11gOracle安装包,通过sftp上传到虚拟机。oracle11.2.4安装包及补丁包链接如下:链接:https://pan.baidu.com/s/1TaVNOqXCoSjsJJZ-ADLkmw提取码:ycxi前两个zip包为oracle,第三个为grid安装包,只安装数据,则下载1和2即可,如需搭建......
  • c++ linux基础学习第一课
    课程目标:1.shell命令解析器shell就是命令解析器,将用户命令翻译成内核能够识别的指令。shell常用的快捷键:tab:补齐命令,补齐文件(包括目录和文件)ctrl+a光标移动到头部,ctrl+e光标移动到尾部2.linux下主要目录:/bin保存着二进制文件、可执行程序和shell命令/sbins是superu......
  • 【Linux】CentOS防火墙操作:开启端口、开启、关闭、配置
    ......
  • Linux打包C++应用deb脚本
    目录结构├──CMakeLists.txt├──README.md├──scripts│  └──build_deb.sh├──src│  └──app.cpp└──VERSION打包脚本#!/bin/bashPROJECT_NAME="my-app"PROJECT_PATH=$(cd"$(dirname${BASH_SOURCE[0]})";cd..;pwd)MAINTAINER="jojo......
  • linux系统nfs搭建-cnblog
    Linux系统nfs搭建首先介绍一下NFS:​ NFS(NetworkFileSystem)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。1、虚拟机nfs环......
  • #yyds干货盘点#linux之curl使用技巧
    获取页面内容>curlhttps://json.im显示HTTP头>curl-Ihttps://json.imHTTP/1.1200OKServer:openrestyDate:Fri,04Jun202107:38:32GMTContent-Type:text/htmlContent-Length:12864Last-Modified:Thu,29Apr202101:39:01GMTConnection:keep-aliveVa......
  • Linux shell 之 for循环变量有空格的问题——IFS变量
    在使用shell的for循环时,如果循环的字符串中间有空格,那么循环时会自动分割,下面是解决的方法 1只需要更改shell分隔符即可2在for循环之前修改IFS变量,示例:3OLDIFS="$IFS"#备份旧的IFS变量4IFS=$'\n'#修改分隔符为换行符56foriin`cataaa`#aaa文件......