首页
学习
活动
专区
工具
TVP
发布

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

Linux下的程序的文件格式是ELF,里面分了各种,有代码数据、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中的数据分别加载到内存中的对应位置。...本文整理了用cpp程序读取内存中的代码和rodata数据的方法。.../proc/pid/maps 下图是Linux的进程内存布局,这是系统给进程虚拟出的一个内存空间,并不是实际的物理内存,maps文件中就记录了虚拟内存的的每段地址分别对应什么数据。...最后一列是这段虚拟内存存储的对应数据。 这个文件的前三列分别是代码、rodata数据、和普通数据,可以看到代码的权限是读和执行,rodata数据是只读,普通数据可读写。...用程序读取内存的代码和rodata数据 以tcpdump程序为例,用程序读取代码和radata的过程如下: 1.查看tcpdump的进程ID。

3.3K20

Linux中的

这不仅简化了Linux 内核的设计,而且为把Linux 移植到其他平台创造了 条件,因为很多RISC 处理器并不支持机制。但是,对机制相关知识的了解是进入Linux 内核的必经之路。...0x10 /* 内核代码, index=2,TI=0,RPL=0 */ #define __KERNEL_DS 0x18 /* 内核数据, index=3,TI=0...0x2B /* 用户数据, index=5,TI=0,RPL=3 */ 从定义看出,没有定义堆栈,实际上,Linux 内核不区分数据和堆栈,这也体现 了Linux 内核尽量减少的使用。...内核代码数据具有最高特权,因此其RPL 为0,而用户代码数据具有最低特权,因此其RPL 为3。可以看出,Linux 内核再次简 化了特权级的使用,使用了两个特权级而不是4 个。...Linux 这样设计所带来的好处是显而易见的,Intel 的分 部件对Linux 性能造成的影响可以忽略不计。

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

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

代码:用来存放代码,的基地址放在寄存器 CS 中,指令指针寄存器 IP 用来表示下一条指令在中的偏移地址; 数据:用来存放程序处理的数据的基地址存放在寄存器 DS 中。...对数据中的某个数据进行操作时,直接在汇编代码中通过立即数或寄存器来指定偏移地址; 栈:本质上也是用来存放数据,只不过它的操作方式比较特殊而已:通过 PUSH 和 POP 指令来进行操作。...在 Linux 2.6 代码中,由于 Linux 把整个 4 GB 的地址空间当做一个“扁平”的结果来处理(的基地址是 0x0000_0000,偏移地址的最大值是 4GB),因此虚拟地址(逻辑地址)在数值上等于线性地址...这张图的意思是:在 Linux 2.6 中,用户代码的开始地址是 0,最大范围是 4 GB;用户数据的开始地址是 0,最大范围也是 4 GB;内核的数据和代码也是如此。 ?...在这个最简单的汇编程序中,会使用到 3 个:代码数据和栈。 前面已经说到:所谓的,就是一个地址空间。既然是一个地址空间,必然包含 2 个元素:从什么地方开始,长度是多少。

2K40

轻松带你解决c语言堆、栈、数据、代码、bss的疑惑

(它也被称为数据区、静态数据区、静态区):数据就是程序中的数据,直观理解就是C语言程序中的全局变量。(注意:全局变量才算是程序的数据,局部变量不算程序的数据(它在栈上),只能算是函数的数据)。...3、什么是bss?      (它又叫ZI(zero initial)):bss的特点就是被初始化为0,bss本质上也是属于数据,bss就是被初始化为0的数据。...;   } 演示结果: 说明:        C语言中使用char *p = "linux";定义字符串时,字符串"linux"实际被分配在代码,也就是说这个"linux"字符串实际上是一个常量字符串而不是变量字符串...(堆内存就好象租房、数据就好象买房。堆内存就好象图书馆借书,数据就好象自己书店买书)你以后会慢慢发现:买不如租,堆内存的使用比全局变量广泛。... c = 0;//这里是bss int array[1000]; char str[] = "linux";        // 第二种方法:定义成全局变量,放在数据  int main(void

1K20

8086汇编语言之数据和代码以及栈的理解

数据DS+偏移地址BX 数据可以通俗理解为数据容器指针 比如: MOV AX 0220H MOV DS AX MOV BX 0 MOV AX [BX] ;我们发现 DS数据一直都是在给不同地址的容器赋值...代码CS+偏移地址IP 代码可以通俗理解为汇编代码指针 比如: 代码从 MOV AX 0220H 开始,那么代码指向这行代码地址, 如果想要跳过这行代码的执行,那么进行代码偏移 在通过debug...DS=13DB ES=13DB SS=13EB CS=13EB IP=0000 -u 13eb:0 13BE:0000 B8FFFF MOV AX,FFFF 栈SS+偏移地址SP 栈可以通俗理解为栈指针...什么是 首先内存并没有分段,的划分来自CPU,来自我们自己对内存的操作。...*16+0x00FA 0xFFFFA=0xFF000*16+0x0FFA 0xFFFFA=0xF0000*16+0xFFFA 的赋值 代码CS 数据DS 栈SS 不能直接赋值, 必须通过通用寄存器中转赋值

2K30

Milvus 数据合并机制

大量零碎的数据有两个明显缺点: 不利于元数据管理,对 SQLite/MySQL 的访问频繁 索引过于分散,影响查询的性能 因此 Milvus 后台落盘任务会不断地把这些小数据合并成大数据,直到合并后的数据大小超过...| 旧版本合并机制的缺点 在 0.9.0 版本以前,数据的合并策略是简单粗暴的:先从元数据拿到一批需要被合并的数据,然后循环遍历合并。如下图所示: ? 假设拿到 7 个数据: 1....合并完成后将前六个数据标记为软删除,最终剩下三个数据:segment_7,segment_8,segment_9。 这种合并机制有一个很大的缺点:占用过多的磁盘空间。...合并的时候,仅对层内数据进行合并,这样就避免了小数据和大数据的合并,减少磁盘写入量,减少过大的临时文件。那么我们来看一下在上一节的场景下,使用新的合并策略后,磁盘的使用量有没有缓解: ?...这里最终得到了 segment_8、segment_9、segment_10 三个数据,前两个数据的大小和 index_file_size 很接近。

84910

尘封的中国 Linux 往事

章文嵩通过Linux,看到了一个更开阔更自由的软件世界,慢慢的也想做一个开源软件。 硕士期间,章文嵩想把花了两年时间写的一个数据库开源,但导师不同意,因为那是国家的课题,当时也没有相关的政策支持。...按照章文嵩对Julian的描述的说法,Julian写程序非常厉害,但也很神秘,两个人一直通过邮件联系,即便时间已经过去二十多年,两人至今仍然没见过面,却始终维持着一基于开源信仰的珍贵友谊。...高能所因为要跟国际物理同行进行数据交流,方汉一位师兄的博士生导师许榕生,便拉了一条64K的国际DDN专线,先拉到日本KEK(高能物理研究所),然后从日本KK再接入到美国能源部斯坦福线性加速中心SLAC国家实验室...年轻的方汉很喜欢玩这个游戏,喜欢到自己上手研发,因此开始自学Linux架服务器。结果他发现Linux比MUD还好玩,兴趣自然转向了Linux。...魏永明带着几个研究生基于Linux重新设计了数控系统的架构,并利用业余时间为Linux系统重写MiniGUI。 在Linux上重写后的MiniGUI功能更丰富,用户体验更好。

1.2K10

浅谈text、data和bss

一般情况,一个程序本质上都是由 bss、data、text三个组成——这是计算机程序设计中重要的基本概念。...data :用于存放在编译阶段(而非运行时)就能确定的数据,可读可写。也是通常所说的静态存储区,赋了初值的全局变量、常量和静态变量都存放在这个域。 而bss不在可执行文件中,由系统初始化。...而data则需要占用可执行文件空间,其内容由程序初始化,因此造成了上述情况。 注意: bss(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小。...data(已手动初始化的数据)为数据分配空间,数据保存在目标文件中。 data包含经过初始化的全局变量以及它们的值。...BSS的大小从可执行文件中得到,然后链接器得到这个大小的内存块,紧跟在数据后面。当这个内存区进入程序的地址空间后全部清零,包含data和bss的整个区段此时通常称为数据区。

1.8K10

linux有一时间后

linux有一时间后该知道的细节 1、wrx各个权限在文件和文件夹的不同。...TED-WNAG/g或:1,$s/Ted-Wnag/TED-WNAG/gc 8、区块选择、多文件编辑、多窗口编辑、环境设定、断行字符、语系转换待补充 9、跳脱[Enter] ---- ---- ---- 用linux...有一时间后该知道的命令 1、chgrp、chown、chmod和mkdir、rmdir的递归参数 2、ls -al和ls -alS 3、cp -i和cp -l(硬连结)/cp -S(符号连结) 4、rm...『$(指令)』 『version=(uname -r)』『echo version』->『3.10.0-229.el7.x86_64』 版权所有:可定博客 © WNAG.COM.CN 本文标题:《用linux...有一时间后》 本文链接:https://wnag.com.cn/28.html 特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,

1.6K20

永朝:流动的大数据

数据文摘根据现场演讲整理,转载须注明出处 推荐关注: 赢在中国颠覆2014(微信ID: yingzaizhongguo2014) 优米官网: http://www.youmi.cn/ 永朝:现任财讯传媒集团...通过穿越文明时代的对话,重新审视互联网文明创建的伟大理念,永朝正是中国新技术力量始终不渝的追寻者和思考者。...所以呢,在这种语境下,我想说,什么是大数据思维,关于数据的重要性大家都毫无疑问接受了,但是我参加了很多大数据论坛和下面的专家请教的时候我发现有这样一个很可怕的问题,这个问题就是,很多的老师们把大数据归结为数据大...那么在这种情况下我认为数据已经被你们杀死了。这个数据已经毫无灵性可言。它已经和生命毫无关系,它是冷冰冰干巴巴的数据的尸体。...而不是今天我们讲的大数据的本质,所以在前几年提出大数据的时候,有人就一针见血的提出不要把大数据理解成数据大。大数据不是数据大,因为数据大是无声的,是一堆堆砌如山的仓库和报表等待我们继续探索。

77550

GOTlinux系统中实现代码动态加载的作用和其他的说明

动态加载,也就是在调用系统函数时再去确认所调用的函数地址的技术需要使用两个,一个是.plt,一个是.got.plt。...后者其实是.got的一种特定形式,.got在程序的加载和执行过程中还有其他形式和作用,在后续章节我们再研究。 上一节我们以调研系统函数puts为例描述了动态加载的基本过程。...由于.text设置为不可写,如果可写,那么就可能让人直接修改其中代码指令了。.got.plt属于数据,因此里面的数据可以修改,绕这个弯的目的就是防止代码被他人直接修改。...除了.got.plt外,还需要理解的是.got,后者的作用主要在于访问共享代码库到处的变量。两者区别在于.got.plt包含了代码,而.got会直接包含共享库到处的变量地址而不是包含代码。...我们再看其他一些重要的。在后面二进制分析中,我们还需了解.rel.或.rela.这类重定向。他们的类型属于SHT_RELA,这些的作用在于帮助链接器实现代码重定向。

2.2K20

C语言变量那些事(堆栈、数据、代码、作用域、生命周期)

数据、代码、bss又是什么呢?...(注意:后续全局变量是存放在数据中,而数据是另一种存储方式) 2.2 栈存放大多数局部变量 局部变量包含:自定义函数内,main函数内定义的变量。...其可以将局部变量存储在栈上改变为存储在数据或bss (弱类型语言中的编译器其实也是帮你分配好了相关数据的存储类型,只不过C语言需要自己设定) 2.3 数据存放全局变量和非0的静态局部变量...(同时作为局部变量的b来说,static int b = 4;,由于b是非0的静态局部变量其也存放在数据上) 2.4 代码和bss 代码存放函数(对于非函数部分,诸如#include,宏定义,全局变量等在.c文件编译过程中进行的处理与替换) bss存放变量剩下的:显示或未显示初始化为0的数据 3.

35420

保护模式-第4讲--跨越权限

记录着描述符的权限. ​ 一致代码的情况下: 当CPL== DPL 且 RPL <= DPL 的时候.才能访问 数据....描述符里面可以设置权限等. 1.从GDT表中寻找代码 ​ 这个简单.根据描述符.来找 我们上一篇已经说过了. s = 1 代表是代码或者是数据....然后再根据s解析type来 具体的判断是代码还是数据. 其实简单的方法就是看 描述符的 16进制表示的低五位来判断寻找即可. 或者根据讲解描述符的时候写的代码来寻找. 查看描述符 ?...而s = 1的时候代表是系统或者数据. 所以可以肯定如为1 那么组成的这个16进制位必然是大于8的. 举个例子. Windbg查看描述符 ?...看s = 1还是0 确定是是代码或者数据. 然后紧接着看s后面跟着的type值. 由type值确定是代码还是数据.

1.1K30

获取Oracle数据的大小

我们在日常Oracle维护中可能需要知道数据库哪个表占用的空间最大,下面这个功能可实现这个功能 ---- 开发环境 操作系统:CentOS 7.3 Python版本 :2.7 Django版本:...首先获取到表单中的数据,如 ipaddress,tnsname以及执行的命令 2. 然后通过ipaddress,tnsname从oraclelist数据库中查找获得用户名密码用于连接 3....再判断命令内容,如果是check_segments_size则执行函数getsegmentssize 这里的getsegmentssize函数获取Oracle大小大于1G的并按大小降序排列,详情看具体代码...最后把页面的标题以及表格的数据放到dic变量中传到 oracle_command_result_5.html模板文件中 ---- getsegmentssize函数 这里我们引用getsegmentssize...函数来获取Oracle大小大于1G的并按大小降序排列,具体看SQL语句 monitor/command/getoraclecommandresult.py def getsegmentssize(cursor

86620
领券