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

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

Linux下程序文件格式是ELF,里面分了各种,有代码、数据、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中数据分别加载到内存中对应位置。...本文整理了用cpp程序读取内存中代码和rodata数据方法。.../proc/pid/mem mem是内核创建虚拟文件,是Linux”一切皆文件”在进程上体现,但是这个文件无法直接进行读取,需要先利用ptrace进行绑定操作。...这个文件前三列分别是代码、rodata数据、和普通数据,可以看到代码权限是读和执行,rodata数据是只读,普通数据可读写。...用程序读取内存代码和rodata数据 以tcpdump程序为例,用程序读取代码和radata过程如下: 1.查看tcpdump进程ID。

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

如何优雅调试错误

摘要:当程序运行出现错误时,目标文件没有调试符号,也没配置产生 core dump,如何定位到出错文件和函数,并尽可能提供更详细一些信息,如参数,代码等。...第一板斧 准备一测试代码 018.c #include int main(int argc, char *argv[]) {    FILE *fp = NULL;    fprintf.../a.out Segmentation fault (core dumped) 可以看到发生了错误。...,为了防止黑客猜测代码区位置),我们可以用一 python 代码来找到出错代码偏移量,如下: $ python3 -c "print((0x00007f93d96cf3cc-0x7f93d9674000...= -1) return -1 看函数名感觉是判断当前流 FILE 是否是宽字节流,推测是从 FILE 结构里取信息,结果 FILE 结构地址非法,所以内存读取错误,直接就错误了。

4.4K52

kafka日志如何读写?

那说说kafka日志如何读写吧?” 我心里默默说了句 “擦…我说看过一点点源码,不是亿点点。早知道不提这句了!”,那怎么办呢,只能回家等通知了啊。...今天我们就来看看源码层面来Kafka日志如何读写。...再说下rollJitterMs,这其实是个扰动值,对应参数是log.roll.jitter.ms,这其实就要说到日志切分了,log.segment.bytes,这个参数控制着日志文件大小,默认是...日志写入 1、判断下当前日志是否为空,空的话记录下时间,来作为之后日志切分依据 2、确保位移值合法,最终调用是AbstractIndex.toRelative(..)方法,即使判断offset...4、更新日志最大时间戳和最大时间戳对应位移值。

98030

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

数据DS+偏移地址BX 数据可以通俗理解为数据容器指针 比如: MOV AX 0220H MOV DS AX MOV BX 0 MOV AX [BX] ;我们发现 DS数据一直都是在给不同地址容器赋值...代码CS+偏移地址IP 代码可以通俗理解为汇编代码指针 比如: 代码从 MOV AX 0220H 开始,那么代码指向这行代码地址, 如果想要跳过这行代码执行,那么进行代码偏移 在通过debug...什么是 首先内存并没有分段,划分来自CPU,来自我们自己对内存操作。...由8086CPU (地址+偏移地址=“物理地址”) 方式给出内存单元物理地址,使得我们用分段方式管理内存 可以将通俗理解为小区一栋楼,偏移地址为这栋楼住户门牌号.比如五号楼101房,那么形象比喻...这是由于8086cpu16位寄存器局限性造成, 由于16位寄存器最大只能存放0xFFFF 如果存放超过五位地址比如0xFFFFA 则无法存放, 为了解决这个问题, cup设计者想出了 地址*16

2.1K30

、索引LOGGING与NOLOGGING

--==================================== -- 表、索引LOGGING与NOLOGGING --===============================...===== 在有些情况下,对于表和索引可以采用记录日志模式,也可以使用不记录日志模式。...如在对表、索引使用数据泵导入时,可以 使用NOLOGGING模式,而使用DATA GUARD或对可用性较高场景中需要记录日志,甚至使用强制记录日志。...本文介绍了在表,索引使用 LOGGING与NOLOGGING时产生redo大小以及DIRECT INSERT APPEND 使用方法。...一、表,索引上使用一般DDL,DML时,LOGGING与NOLOGGING情况 1.查看数据库归档模式 有关设置日志归档模式问题,请参考: Oracle 联机重做日志文件(ONLINE

1.6K20

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

后面的数据、代码、bss,可能你平时没有怎么细心总结,现在你可能还真讲不出他们区别来,不信的话,读者在看到这里可以先暂定一下,在自己以往写了那么多代码,仔细回忆看看他们有啥区别,如果不知道也没关系...\n", p2); return 0;   } 输出结果: 三、代码、数据、bss: 编译器在编译程序时候,将程序中所有的元素分成了一些组成部分,各部分构成一个,所以说是可执行程序组成部分...1、什么是代码?        代码就是程序中可执行部分,直观理解代码就是函数堆叠组成(就是函数体里面的程序那部分)。 2、什么是数据?      ...3、什么是bss?      (它又叫ZI(zero initial)):bss特点就是被初始化为0,bss本质上也是属于数据,bss就是被初始化为0数据。...注意:       数据(.data)和bss区别和联系:二者本来没有本质区别,都是用来存放C程序中全局变量

1.2K20

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

几个重要寄存器 在 x86 系统中,寻址机制以及相关寄存器是如此重要,以至于我忍不住在这里,把几个寄存器再小结一下。 ?...代码:用来存放代码,基地址放在寄存器 CS 中,指令指针寄存器 IP 用来表示下一条指令在偏移地址; 数据:用来存放程序处理数据,基地址存放在寄存器 DS 中。...虽然这张图中描述结构更复杂,但是从本质上来说,它与 8086 中描述结构是一样!...这张图意思是:在 Linux 2.6 中,用户代码开始地址是 0,最大范围是 4 GB;用户数据开始地址是 0,最大范围也是 4 GB;内核数据和代码也是如此。 ?...因此,各位小伙伴在看一些书籍时候,心中要有一个谱:当前描述内容上下文环境是什么。 当我们创建一个进程时候,在内核中就会记录这个进程所拥有的所有线性地址区间。

2.1K40

自定义 UserSectionName 指定链接空间

打开 Properties 选项配置界面,其中 Settings / Managed Linker Script 页面就是链接文件里具体程序链接设置,这个页面的最上面 Manage linker script...IDE 里分别提供了这三类程序空间指定: 链接设置框最后 Extra linker script input sections 框里单独为自定义 UserSectionName 指定链接空间...比如工程 clock_config.c 文件里如下函数 UpdateSemcClock(),这个函数在默认 RO .text 里,RO 都是链接在 Flash 里,但是我们希望将这个函数重定向到...RO 一般从 Flash 最前面开始链接,.text 在最前面,然后是 ramfunc 函数实体,最后是 .data_init (全局变量初值)。...RW 也是从 RAM 最前面开始链接,.data 在前,公务员遴选.bss 在后,然后是 Heap 和 Stack(Heap/Stack具体位置是可以设置,有 Start、End、Post

26440

如何计算重量报价运费?

条件1 筛选重量所对应区间。 '重量数据'[重量]>='报价表'[起始重量] && '重量数据'[重量]<'报价表'[结束重量] 2. 条件2 筛选客户对应方案。...因为重量数据表里面没有客户信息,只有方案信息,所以要通过Related去引用客户表里对应客户信息。 3. 了解筛选过程结果 以第一个数据,我们把条件代入筛选公式。甲客户,300g。...通过Related去关联到甲客户对应报价方案A,在标价表中去筛选方案A ? 然后根据重量去寻找哪个区间。300g小于结束重量,并大于起始重量只有0-500这个区间。...所以我们得出报价筛选结果如下图。 ? (三) 计算运费 筛选出报价表后,那就容易计算了,我们需要提取2个字段,一个是公斤价格,一个是挂号费。针对单行表格,取字段值就可以直接用Values函数。...因为Values返回是表,但是如果是当行单列则返回是值格式。

4.6K10

如何评价一代码

你这里规模说是代码规模,也就是解决同样问题程序包含代码行数。如果单从这个因素讲,那一定是代码规模越小越好。但规模越小往往就会让代码本身复杂程度变高,影响可读性。...人们说最多就是执行效率和运行空间关系,还有执行效率和可读性关系。 2.1 以空间换时间 随着硬件设备成本越来越低,越来越多行业都提倡以空间换时间设计思想。...[] p; 没有嵌入式经验的人一定会问,这段代码申请了一空间后什么也没做就释放掉了,这不是画蛇添足吗。...其实,这是一容错代码,就是为了保证系统中有足够空间供后面的代码执行。 是不是想想就很可怜,程序运行中突然发现内存不够了,不得不停掉。 4 可读性 ?...铁打的项目流水程序员,一可读性差代码对项目而言很可能意味着灭顶之灾。 对于初学者,代码规范这个要素必须非常重视,如果错过了这个培养良好习惯黄金时期,后面再改就很难了。

69790

如何修改pod ip地址

IP addresses available in range set: 192.168.1.33-192.168.1.62 分析 从字面意思是说,在这个ip地址已经没有可用ip了,说明已经分配完了...既然是没有可用ip可分配了,1.33~1.62也就只有30个ip地址,那就去看看pod cidr规划,以及这个服务调度到node上所分配pod地址和已经在node上运行pod。...另外,由于集群中已经运行了一些pod,所以需要先修改集群cidr,然后新增几个节点,把已经运行服务强制调度到新节点上,然后删除旧节点,然后再重新加入。...3.删除现有ip pool kubectl delete ippool k8s-ippool 4.创建ip pool kubectl create -f k8s-ippool.yaml...维护旧节点 1.增加节点,并确认网络 2.驱逐旧节点上服务 3.删除旧节点 4.重新加入旧节点,并确认网络

6.3K50

说明

1.什么是位? 位声明和结构是类似的,有两个不同: 1.位成员必须是 int、unsigned int 或signed int 。...位空间上是按照需要以 4 个字节( int )或者 1 个字节( char )方式来开辟。 3....位涉及很多不确定因素,位是不跨平台,注重可移植程序应该避免使用位。 3.位跨平台问题 1. int 位被当成有符号数还是无符号数是不确定。 2....当一个结构包含两个位,第二个位成员比较大,无法容纳于第一个位剩余位时,是 舍弃剩余位还是利用,这是不确定。...跟结构相比,位可以达到同样效果,但是可以很好节省空间,但是有跨平台问题存在。

8610

Linux中

Linux中 Intel 微处理器机制是从8086 开始提出, 那时引入机制解决了从CPU 内部 16 位地址到20 位实地址转换。...对照图2.10,从描述符数值可以得出: 基地址全部为0x00000000; 上限全部为0xffff; 粒度G 为1,即段长单位为4KB; D 位为1,即对这4 个访问都为32 位指令...寄存器与选择子 寄存器CS 、DS 、ES 、FS 、GS 、SS ,在实模式下时,中存储基地址,即内存起始地址。...而在保护模式下时,由于基址已经存入了描述符中,所以寄存器中再存放基址是没有意义,在寄 存器中存入是一个叫作选择子东西– selector。...用此索引值在描述符表中索引相应描述符,这样,便在描述符 中得到了内存起始地址和界限值等相关信息。

4.5K20

网页字体排版哲学:首缩排或间距

因为这似乎是网页上字体排版空白区,很多网站分段排版样式都是间距 + 首缩排,不忍直视。其实,这是没明白分段表达需求,在网页默认间距排版基础上硬加首缩排,极其荒谬。...两种样式区别: 首缩排,首缩进两字符,间距等于行间距。 间距式,首不进行缩进,间距大于行间距。...其次,诗歌注重意境,对于意境想象,留白较大间距排版更为优雅。 最后,对于分段需求特殊情况——分段停顿,由于其不连续程度很大,因此应当采用分离程度更大间距排版,而非首缩排。...接下来就是间距与首缩排技术细节。...| iA 网页排版: Web 字体选择和运用 | Coding 博客 Web 中文字体排版指南 | voya 中文字体网页开发指南 | 阮一峰网络日志 如何优雅选择字体(font-family)

1.6K10

如何编写一内存蠕虫?

我们怎么写一代码,能够在程序内存里面不停移动?就是让shellcode代码能在内存中不停复制自己,并且一直执行下去,也就是内存蠕虫。...s,我们把数据复制到地址为s+20处,原来数据变为0x90,表示数据曾经来过这里,insect是用来复制数据用到,复制了20次,刚刚好把shellcode复制完。...因为shellcode相当于向下移动20位,所以我们要把eax加上20,还要把edx恢复成0,方便下次接着复制,然后去执行我们shellcode,接着跳转到insect继续执行,这是ee干的事。...inscet和ee加起来是复制我们shellcode到其他地方,然后去执行shellcode,然后再复制,循环下去。...,接着在复制再执行,循环下去,当然在一内存里循环执行也可以,只要找到位置,跳转过去就行 *本文作者:好好学习er,转载请注明来自FreeBuf.COM

42420
领券