美文网首页
Linux相关技术总结

Linux相关技术总结

作者: Sma11_Tim3 | 来源:发表于2020-04-06 17:25 被阅读0次

Linux环境下的GDB调试方法
https://blog.csdn.net/horotororensu/article/details/82256832
网上很多,这篇比较全,建议收藏或自行总结。

GOT表和PLT表知识详解
https://blog.csdn.net/qq_18661257/article/details/54694748

关于fork函数和execl函数

fork函数的特性。fork被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;

在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。

execl函数说明
int execl(const char * path,const char * arg,....);
execl()用来执行参数path字符串所代表的文件路径,
接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,
最后一个参数必须用空指针(NULL)作结束。*/

MODULE_LICENSE("GPL")
模块的许可证声明
从2.4.10版本内核开始,模块必须通过MODULE_LICENSE宏声明此模块的许可证,否则在加载此模块时,会收到内核被污染 “kernel tainted” 的警告。从linux/module.h文件中可以看到,被内核接受的有意义的许可证有 “GPL”,“GPL v2”,“GPL and additional rights”,“Dual BSD/GPL”,“Dual MPL/GPL”,“Proprietary”。

在同时支持2.4与2.6内核的设备驱动中,模块可按如下方式声明自己的许可证。

适用于2.4与2.6内核的模块许可证声明模板

MODULE_LICENSE(“GPL”);

获得内核函数地址的四种方法
1、从 System.map 文件中直接得到地址
grep sys_read /boot/System.map
2、使用 nm 命令读取 vmlinux 的信息
nm /usr/lib/debug/boot/vmlinux-4.4.0-72-generic | grep sys_read
3、从 /proc/kallsyms 文件获得地址
cat /proc/kallsyms | grep perf_trace_do_sys_open
4、使用内核函数接口
使用 kallsyms_lookup_name( )
该函数在 kernel/kallsyms.c 文件中定义的, 要使用它必须启用 CONFIG_KALLSYMS 编译内核.
kallsyms_lookup_name( ) 接受一个字符串格式内核函数名, 返回那个内核函数的地址.
kallsyms_lookup_name("函数名");
更多详细介绍:https://blog.csdn.net/gatieme/article/details/78310036

CR0的宏,网上扒的

#define CLEAR_CR0    asm ("pushl %eax\n\t"             \
"movl %cr0, %eax\n\t"        \
"andl $0xfffeffff, %eax\n\t"     \
"movl %eax, %cr0\n\t"        \
"popl %eax");
 
#define SET_CR0        asm ("pushl %eax\n\t"             \
"movl %cr0, %eax\n\t"         \
"orl $0x00010000, %eax\n\t"     \
"movl %eax, %cr0\n\t"        \
"popl %eax");

作用:用于根据一个结构体的一个成员获取这个结构体的首地址。(根据成员指针获取父结构体变量指针。)
关于函数IS_ERR()
IS_ERR()来判断内核函数的返回值是不是一个有效的指针。
vim命令查看内核源码
shell脚本

#!/bin/sh
DIR=`pwd`
ctags -R --languages=C,C++ --c++-kinds=+p --fields=+iaS --extra=+q $DIR
find $DIR -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files

运行脚本
在内核源码目录运行该脚本
说明:建立tag需要点时间,请耐心等待。
然后,用gvim快速查找函数、结构体等的定义与声明。
vim [arguments] -t tag edit file where tag is defined
例如:查找init_rootfs函数的定义,使用gvim -t init_rootfs,如果定义只有一处,它会立即自动打开这个文件,并跳转到结构体上,否则会提示你选择哪个文件的哪一处定义。

查看ubuntu系统的版本信息

打开终端输入

cat /proc/version

显示如下
Linux version 4.10.0-28-generic (buildd@lgw01-12) linux内核版本号
gcc version 5.4.0 gcc编译器版本号
Ubuntu 5.4.0-6ubuntu1 Ubuntu版本号

打开终端输入

uname -a

显示linux的内核版本和系统是多少位的:X86_64代表系统是64位的。

打开终端输入

lsb_release -a

显示如下
Distributor ID: Ubuntu //类别是ubuntu
Description: Ubuntu 16.04.3 LTS //16年3月发布的稳定版本,LTS是Long Term Support:长时间支持版本,支持周期长达三至五年
Release: 16.04 //发行日期或者是发行版本号
Codename: xenial //ubuntu的代号名称

相关文章

  • Linux相关技术总结

    Linux环境下的GDB调试方法https://blog.csdn.net/horotororensu/artic...

  • Docker基础技术-Linux Namespace

    写这个系列文章主要是对之前做项目用到的docker相关技术做一些总结,包括docker基础技术Linux命名空间,...

  • Linux内存知识点简单总结

    写在开头:本文为Linux内存相关知识点简单总结。 1. 虚拟地址 Linux采用虚拟内存管理技术,利用虚拟内存技...

  • 命令行学习笔记:系统信息相关命令

    学习内容 系统信息相关: top, df, uname 个人总结 系统相关命令总结 [参考] Linux 查看...

  • JAVA技能树

    JAVA核心技术总结 J2EE技术总结 工作和学习总结 大数据相关技术总结

  • linux相关总结

    Shell指令Vim编辑rpm的使用用户与组用户相关指令组相关指令显示用户的信息查看用户资料信息文件操作更改文件权...

  • Linux常用命令笔记

    Linux常用命令笔记 标签: 笔记 根据慕课网达人养成计划归纳总结的相关笔记 Linux简介 1、Linux分为...

  • JSP相关技术总结

    一.JSP基本原理 jsp 的本质就是servlet,当用户向指定的servlet 发送请求时,Servlet利用...

  • 关于linux下内存问题排查的工具

    对最近linux下排查java内存相关问题的命令做个小的总结 linux系列 top top -p PIDpid为...

  • 学习小组DAY2笔记——Jason

    Linux学习开始 接触编程开始就听说了Linux的大名,现在可以系统了解一下Linux了。思维导图总结一下 相关...

网友评论

      本文标题:Linux相关技术总结

      本文链接:https://www.haomeiwen.com/subject/ogecactx.html