首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核学习(二)之head.S文件分析前期准备

大家好,今天我们来分享linux内核的工程建立以及一些我在工作当中使用source insight 经常会用的一些快捷操作;然后会分享一些有用的汇编指令,主要是经常会遇到的汇编指令,汇编指令没必要去专门学...,当你在看启动汇编代码的时候,只要稍微看的懂它的意思就行,因为在上班中,你很少去写汇编,我们只是用它分析,体会一下linux内核是如何启动的。...在左侧选择选择kernel这个目录(这个是你放linux kernel的地方),然后点右侧边栏的add tree即可添加。...汇编中表示当前指令的地址 • # 立即数前面要加#或$,表示这是个立即数 3、常用gnu伪指令 • .global _start @ 给_start外部链接属性 • .section .text @ 指定当前段为代码...三、总结: 今天先暂时分享这么多汇编指令,主要是一些伪指令,明天会继续分享,先消化这些,慢慢来,不要急,为什么要分享这些汇编指令,这里主要是下次带大家分析head.S文件,同时也可以让大家熟悉一下汇编常用指令

78330
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 终端tty pty pts描述

    在使用Linux的过程中,当我们通过ssh或者telnet等方式连接到服务器之后,会有一个相应的终端来对应。而在直接登陆到Linux服务器的时候也有一个对应的终端。...也就是说所有登陆到当前Linux服务器的用户都有一个对应的终端,那他们有什么差异,终端到底是怎么一回事?本文作简要描述如下。...如果配置了Linux系统运行等级为3的时候,Linux启动后就直接为文本模式,在这种情况下,当我们登陆到Linux服务器,即表明开启了一个终端模式会话。...Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。...2的slave [root@desktop ~]# ls /dev/pt* /dev/ptmx /dev/pts: 0 1 2 ptmx 六、终端示意图 image.png 七、更详细概念描述可参考

    6.9K30

    Linux 文件描述符详解

    Overview 了解Linux怎样处理输入和输出是非常重要的。一旦我们了解其原理以后,我们就可以正确熟练地使用脚本把内容输出到正确的位置。同样我们也可以更好地理解输入重定向和输出重定向。...Linux标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误输出 ---- Linux系统将所有设备都当作文件来处理,而Linux...其实我们可以想象我们电脑的显示器和键盘在Linux系统中都被看作是文件,而它们都有相应的文件描述符与之对应。 其实我们与计算机之间的交互是我可以输入一些指令之后它给我一些输出。...1>&6 vincent@geek:~/test$ cat test i love linux shell!!!1234 上面的命令很有意思:我首先把文件描述符6指向test文件。...命令如下: cat /dev/null > test1 ---- Linux使用/tmp目录来存放不需要一直保留的文件,大多数Linux系统会在启动时自动删除/tmp目录中所有的文件。

    2.4K30

    Linux编程(文件描述符)

    Linux编程世界中,不可能没听过文件描述符这个概念,我们操纵任何设备的时候,几乎都要通过它来达成的,它究竟是何方神圣呢?随我描述符科学家来一探究竟。...首先,我们在Linux下打开文件用的都是如下代码: int fd = open(... ...); 当然有同学可能会说,有时也可以用fopen(),但是fopen()只是标准IO对系统IO的封装,归根结底还是使用...很多人就想当然地以为打开嘛,就跟在windows下双击一个文件,或者双击一个文件夹一样,就是一个动作而已,其实不然,常说的打开一个文件实际上最重要的是获取这个文件的描述符,描述符是用来表征这个文件的代表物...内核空间中有一堆数据结构表达一个文件的属性信息,但是用户空间看不见,只看见一个代表了这些信息的整数i,通常我们称之为文件描述符,对文件的读写和ioctl操作都是通过这个东东来达到的呢!

    1.7K20

    如何读取Linux进程中的代码和数据

    Linux下的程序的文件格式是ELF,里面分了各种,有代码、数据、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中的数据分别加载到内存中的对应位置。...本文整理了用cpp程序读取内存中的代码和rodata数据的方法。...这个文件的前三列分别是代码、rodata数据、和普通数据,可以看到代码的权限是读和执行,rodata数据是只读,普通数据可读写。...用程序读取内存的代码和rodata数据 以tcpdump程序为例,用程序读取代码和radata的过程如下: 1.查看tcpdump的进程ID。...2.运行自己写的程序,分别输入进程PID和代码的地址。

    3.7K20

    Linux内存描述之概述--Linux内存管理(一)

    而内存管理的其他地方则认为他们就是在处理一个(伪)NUMA系统. 2.2 Linux物理内存的组织形式 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点...(ISA)设备需要用到它, 然后是可直接映射到内核的普通内存域ZONE_NORMAL,最后是超出了内核的物理地址域ZONE_HIGHMEM, 被称为高端内存. ...中引入一个数据结构struct pglist_data ,来描述一个node,定义在include/linux/mmzone.h 文件中。...一个管理区(zone)由struct zone结构体来描述,在linux-2.4.37之前的内核中是用typedef struct zone_struct zone_t数据结构来描述) 对于x86_32...每个物理的页由一个struct page的数据结构对象来描述

    6.9K30

    Linux内核编程--文件描述

    Linux操作系统中,一切皆是文件—— "Everything is a file"。 如果要在Linux系统中编写操作文件的代码,需要借助文件描述符。...文件的索引——文件描述符(file descriptor): 文件描述符是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。...文件描述符就是内核为了高效管理已被打开的文件所创建的索引值。 文件描述符指向内核为每一个进程维护的打开文件记录表。当要处理文件时,将文件对应的文件描述符作为参数传给函数。...文件描述符在用户进程和内核之间的映射关系: Linux中查看文件描述符的指令:lsof(list open files) lsof可以打开的文件: 普通文件 目录 网络文件系统的文件 字符或设备文件...11968 --通过某个进程号显示该进程打开的文件 lsof -i --列出所有的网络连接 lsof -i tcp --列出所有tcp 网络连接信息 *Linux

    2.8K10

    Linux Linux下最大文件描述符设置

    系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 65535 说明: 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max...查看当前系统使用的打开文件描述符数 # cat /proc/sys/fs/file-nr 1280 0 0 113986 说明:第一个数表示当前系统已分配的文件描述符数(文件句柄数),第二个数为分配后已释放的文件描述符数...(当前不再使用的文件描述符数),第三个数为最大文件描述符数,等于file-max。...进程可打开最大文件描述设置 查看进程可打开最大文件描述符: soft nofile # ulimit -n 65535 配置进程可打开最大文件描述符 a)永久配置 添加带背景色内容 # vim /...单个进程打开的文件描述符数不能超过user limit中nofile的soft limit c. nofile的soft limit不能超过其hard limit d.

    6.3K42

    Linux内存描述之高端内存--Linux内存管理(五)

    4G),逻辑空间也只能描述4G的线性地址空间。...--- 4G 内核空间 ---------------------------- 3G 栈 - 向下增长 map - 固定映射 堆 - 向上增长 数据 代码 -------------...从上面的描述,我们可以知道高端内存的最基本思想, 借一地址空间,建立临时地址映射,用完后释放,达到这段地址空间可以循环使用,访问所有物理内存。...内核必须记录每个页框的状态,这种状态信息保存在一个类型为page的页描述符中,所有的页描述存放在mem_map中 virt_to_page(addr)产生线性地址对应的页描述符地址。...每个管理区又有自己的描述符,描述了该管理区空闲的页框,保留页数目等。每个页描述符都有到内存节点和到节点管理区的连接(被放在flag的高位字段)。

    12.4K23

    Linux 考古笔记

    2 流程分析 2.1 引导内核阶段 2.2 内核启动阶段 2.3 init 进程启动 2.4 shell 命令执行 Linux0.11 考古笔记 最近读完《Linux 内核完全注释》和《品读 Linux0.11...核心代码》,大致理解下 Linux0.11 内核的全貌。...从硬件的角度,堆栈寄存器和堆栈指针寄存器中设定的值表示当前所使用的堆栈;从软件的角度, Linux0.11 系统中的堆栈包括有:系统初始化的临时堆栈、内核程序的使用堆栈、任务的内核态堆栈、任务的用户态堆栈...触发一个读磁盘的中断,通过 BIOS 的中断处理读取一些硬件参数到内存 0x9000 这个位置,然后将 system 模块重定位到 0x0000 地址,然后切换实模式到保护模式,最后跳转执行 system/head.s...4)head.s 程序 head.s 程序执行时,重新设置中断描述符表和全局描述符表,然后设置几个相关的寄存器,然后启动内存管理的分页机制,最后跳转到 main 函数。

    1.1K30

    Linux从头学03:如何告诉 CPU,代码、数据、栈在内存中什么位置?

    虽然这张图中描述结构更复杂,但是从本质上来说,它与 8086 中描述结构是一样的!...在 Linux 2.6 代码中,由于 Linux 把整个 4 GB 的地址空间当做一个“扁平”的结果来处理(的基地址是 0x0000_0000,偏移地址的最大值是 4GB),因此虚拟地址(逻辑地址)在数值上等于线性地址...这张图的意思是:在 Linux 2.6 中,用户代码的开始地址是 0,最大范围是 4 GB;用户数据的开始地址是 0,最大范围也是 4 GB;内核的数据和代码也是如此。 ?...还有一点需要提醒一下: 在上述描述的文字中,我都会标明一个机制或者策略,它是由 x86 平台提供的,还是由 Linux 操作系统提供的。...这里描述的地址,经过地址转换之后,就是一个物理地址,没有经过复杂的页表转换。 这也是我们以 8086 系统作为学习平台的目的:抛开复杂的操作系统,直接探索底层的东西。

    2.2K40

    Linux】基础IO_文件描述

    前言 在前文中学习了open函数,我们知道open函数的返回值就是文件描述符,本章将对文件描述符进行详细讲解。 文件描述符 文件描述符是什么?...这里就谈到了文件描述符。如下: 简单来说:文件描述符就是一个进程与该进程所打开文件建立索引关系的数组(文件描述符表)下标。通过文件描述符,也就是该进程对应的的文件描述符表所对应的下标。...我们再来看如下现象: 为什么文件描述符是从3开始的呢? Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...\n"); fflush(stdout);//刷新缓冲区 //关闭 close(fd); return 0; } 按理来说,这是一平平无奇的代码,应该会在显示器上打印出四串文字...其它  了解缓冲区后,我们来看这么一有意思的代码: #include #include #include #include using

    1.3K30

    8分钟掌握Linux内核分析的核心科技

    : INITSEG(9000:0000)参数表:(参见Include/linux/tty.h) 参数名 偏移量(址均为0x9000) 长度Byte 参考文件 PARAM_CURSOR_POS...保护模式下的初始化在内核源码中对应的程序是/Arch/i386/boot/compressed/head.S 和 /Arch/i386/KERNEL/head.S ;以下部分主要是针对这两个文件进行的分析...1.几个相关文件: /Arch/i386/boot/compressed/head.S /Arch/i386/KERNEL/head.S //Arch/i386/boot...、和中断描述附表idt; 2.从页目录和pg0页表可以看出,0�;4M物理内存被用作系统区,它被映射到系统线性空间的0�;4M和3G�;3G+4M;即系统可以通过访问这两个来访问实际的0&...#0;4M物理内存,也就是系统所在的区域; 3.本来在实模式下初始化时已经建立了全局描述符表gdt,而此处重新建立全局描述符表gdt则主要是出于两个原因:一个就是若内核是大内核bzimag,则以 前建立的

    1.5K50

    Linux内存描述之内存节点node--Linux内存管理(二)

    1 内存节点node 1.1 为什么要用node来描述内存 这点前面是说的很明白了, NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对于任何一个...因此linux内核需要用一种体系结构无关的方式来表示内存....内存中的每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在include/linux/mmzone.h, line 615 在分配一个页面时..., Linux采用节点局部分配的策略, 从最靠近运行中的CPU的节点分配内存, 由于进程往往是在同一个CPU上运行, 因此从当前节点得到的内存很可能被用到 1.3 pg_data_t描述内存节点 表示node...-3.x~4.x的实现 node_data内存节点数组 在新的linux3.x~linux4.x的内核中,内核移除了pg_data_t的pgdat_next之指针域, 同时也删除了pgdat_list链表

    7.8K21

    Linux内存描述之内存页面page--Linux内存管理(四)

    1 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个...内存中的每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在include/linux/mmzone.h, line 615, 每个结点关联到系统中的一个处理器...(ISA)设备需要用到它, 然后是可直接映射到内核的普通内存域ZONE_NORMAL,最后是超出了内核的物理地址域ZONE_HIGHMEM, 被称为高端内存. ...简单来说, 页是一个数据块, 可以存放在任何页框(内存中)或者磁盘(被交换至交换分区)中 我们今天就来详细讲解一下linux下物理页帧的描述 2 页帧 内核把物理页作为内存管理的基本单位....链表中,它包括的几种page:ramdisk或ramfs使用的页, shm_locked、mlock锁定的页 PG_mlocked 该page在vma中被锁定,一般是通过系统调用mlock()锁定了一内存

    8.3K11
    领券