
汇编
文章平均质量分 59
luoganttcc
微信:luogantt2
展开
-
x86各种jump
jmp x86原创 2022-09-21 09:36:40 · 129 阅读 · 0 评论 -
寄存器名称
:http://www.intel.com/products/processor/manuals/原创 2022-09-21 09:23:50 · 153 阅读 · 0 评论 -
nm 查看文件的符号表
【代码】nm 查看文件的符号表。原创 2022-09-20 10:29:22 · 344 阅读 · 0 评论 -
再谈应用程序分段: 数据段、代码段、BSS段以及堆和栈
分段本身就是一个比较复杂的内容,值得再专门写一遍文章介绍,本文再前文基础上再谈应用程序的分段。转载 2022-09-19 18:29:16 · 1764 阅读 · 0 评论 -
操作系统的程序内存结构 —— data和bss为什么需要分开,各自的作用
3、,其实也是最重要的原因,就是当系统中运行着多个该程序的副本时,它们的指令都是一样的,所以内存中只须要保存一份改程序的指令部分。当然每个副本进程的数据区域是不一样的,它们是进程私有的。不要小看这个共享指令的概念,它在现代的操作系统里面占据了极为重要的地位,特别是在有动态链接的系统中,可以节省大量的内存。比如我们常用的Windows Internet Explorer 7.0运行起来以后,它的总虚存空间为112 844 KB,它的私有部分数据为15 944 KB,即有96 900 KB的空间是共享部分。转载 2022-09-19 17:32:23 · 2156 阅读 · 0 评论 -
【linux操作系统知识】虚拟地址中:.data段和.bss段
的数据段时,内核会将其转到一个全零页面,不会发生缺页中断,也不会为其分配相应的物理内存。的全局变量和静态局部变量,数据段属于静态。,从而分配相应的物理内存;占用物理文件,也占用内存空间。的全局变量和静态局部变量。:为数据段,用来存放程序中。:称为未初始化段,用来存放。的数据时,系统会发生。转载 2022-09-19 17:10:58 · 428 阅读 · 0 评论 -
C 程序的内存布局
例如,由 C 中的 char s[] = “hello world” 定义的全局字符串和 main 之外的诸如 int debug=1 的 C 语句(即全局)将存储在初始化的读写区域中。该段中的数据在程序开始执行之前由内核初始化为算术 0,未初始化的数据从数据段的末尾开始,包含所有初始化为零或源代码中没有显式初始化的全局变量和静态变量。通常,文本段是可共享的,因此对于频繁执行的程序(例如文本编辑器、C 编译器、shell 等),只需要在内存中保存一个副本。转载 2022-09-19 16:37:06 · 680 阅读 · 0 评论 -
Memory Layout of C Programs
【代码】Memory Layout of C Programs。转载 2022-09-19 16:16:26 · 152 阅读 · 0 评论 -
数据段、代码段、堆栈段、BSS段的区别
本文结合实际的例子讲述一下数据段、代码段、堆栈段以及BSS段。more。转载 2022-09-19 16:05:55 · 3243 阅读 · 0 评论 -
关于BSS解释
是哪位总统接见Dennis Ritchie,并给他骑士勋章,因为他发明了C。转载 2022-09-19 15:25:46 · 155 阅读 · 1 评论 -
关于bss段的一些思考
不占的话在程序运行前期将变量数据部署到SRAM中时一些东西就不太好处理,例如bss段不是最后一个段时就不知道要在SRAM中分配多大空间给bss段这部分数据,而且有时我们可能会将程序直接下载到SRAM中运行,总之这里需要考的东西还挺多,具体怎么实现的就没去深入研究了。在bin文件中,bss段需要占用空间吗,答案本来应该是肯定的,但这里有一点需要注意,当连接脚本中将bss段作为最后一个段时,我们会发现它不会占用bin文件的大小;中是不占用空间的,只会记录它的大小等一些标记性数据,具体细节不讨论。转载 2022-09-17 21:16:43 · 537 阅读 · 1 评论 -
bss段不占据磁盘空间的理解
里面存放的是elf文件中各个段的名字以及变量名等字符串,字符串表中记录了这些字符串以及对应的下标,需要用到这些字符串时,直接用偏移下标去取就行了。段表中存放的段的名字这一项,就是存的。段占据的大小存放在ELF文件格式中的段表(Section Table)中,段表存放了各个段的各种信息,比如段的名字、段的类型、段在elf文件中的偏移、段的大小等信息。存放未初始化的全局变量,将.data和.bss分开的理由是为了节约磁盘空间,.bss不占实际的磁盘空间。段中的数据并没有占据磁盘空间,从而节约了磁盘的空间。转载 2022-09-17 21:11:02 · 459 阅读 · 0 评论 -
C语言之父Dennis Ritchie告诉你:如何成为世界上最好的程序员?
文/译/网易云信想要阅读更多技术干货文章,欢迎关注。了解,来自网易核心架构的通信与视频云服务。我不知道如何成为世界上最好的程序员。但是,我们可以向历史上最伟大的程序员学习。该系列文章将会向大家分享C语言的创造者、Unix操作系统的关键开发者Dennis Ritchie、。Linux内核的发明人Linus Torvalds的经历与建议。获得计算机编程学位的前几天,Dennis Ritchie获得了在麻省理工学院(麻省理工学院)工作的机会。转载 2022-09-17 19:42:05 · 573 阅读 · 0 评论 -
反汇编命令
【代码】反汇编命令。原创 2022-09-16 18:10:22 · 168 阅读 · 0 评论 -
linux反汇编简单示例
在复杂比较难的程序中比如内核调试,会用到反汇编调试,当程序遇到一些未知的变量错误等,可以直接反汇编来查看汇编代码,一切一目了然。-S 目标文件 显示反汇编代码,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息;显示全部Header信息,并显示对应的十六进制文件代码。反汇编test中的需要执行指令的那些section。-s 文件名 显示头文件信息及所对十六进制信息。-h 文件名 显示各section的头信息。-j文件名 仅反汇编指定的section。-a 文件名 显示当前文件的格式。转载 2022-09-16 18:08:34 · 2597 阅读 · 0 评论 -
GDB调试之段信息
为了更好的调试程序,需要对程序编译后产生的库或可执行程序有一定的了解,本文主要介绍一下其中的段信息。转载 2022-09-16 12:08:12 · 1149 阅读 · 0 评论 -
GDB观察栈的内存布局
由源文件可知,main函数里面嵌套doCalc函数,doCalc函数又嵌套square函数,因此,这三个函数在栈中的分配如上图所示。每一行前面的序号,就是栈帧在栈中的序号,#0表示栈顶,#1表示下一个栈帧,以此类推。,用于存储函数的实参、局部变量、返回值,以及函数内调用函数时,当前函数的一些寄存器的相关信息(比如用于指向下一条指令的程序计数器)。栈的英文是stack,堆的英文是heap,很多人把stact翻译成堆栈,是不对的。由于函数的嵌套,栈中可能有多个栈帧,此时,可以认为,一个栈帧存储一个函数。转载 2022-09-15 21:07:59 · 1007 阅读 · 0 评论 -
再谈函数的栈帧
函数的栈帧 stack frame 这个名字非常好,主函数 main 在栈低,main 调用了sum 在栈顶,一个函数一个栈帧 (frame), 所有的frame 都在栈中,这就是函数栈帧的本意。我们发现一个问题,就是全局变量 NUM 和局部变量 cc 和c 的内存地址差距比较大,不是同一段代码吗,真么差距这么大呢。原创 2022-09-15 19:14:39 · 269 阅读 · 0 评论 -
哈工大操作系统——引导启动程序
亲爱的小伙伴你们好,不知道你有没有在学习操作系统的过程中遇到过这样那样的困难,很多次想要放弃,很多次怀疑自己的能力,但是请你相信“未来的路就在脚下,不要悲伤,不要害怕”,一定要“充满信心,期盼着明天!”。转载 2022-09-13 18:49:01 · 609 阅读 · 0 评论 -
int 0x13 读取磁盘到内存 Loading Sectors
【代码】int 0x13 读取磁盘到内存 Loading Sectors。原创 2022-09-13 18:38:02 · 409 阅读 · 0 评论 -
jmpi 与ljmp指令分析
jmpi是linux下intel 80x86的汇编指令,而ljmp是linux下AT$T格式的汇编指令。jmpi的格式是: jmpi 段内偏移,段选择子。ljmp的格式是: ljmp 段选择子,段内偏移。jmpi与ljmp都是段间跳转指令。jmpi与ljmp指令分析。原创 2022-09-13 16:47:52 · 2169 阅读 · 0 评论 -
linux源码阅读笔记 jmpi指令(转)
他们把1024K地址空间分成16字节的段,共64K个段,用一个8085的16位寻址寄存器作地址偏移寄存器(故段的长度是64K),而另一个8085的16位寻址寄存器作16字节段的段地址寄存器,注意,他保存的不是16字节段的地址,而是16字节段的序号(0,1,...65535)。要了解发生了什么,我们要看看处理器的内部,会看到巨大的差异。但还不是一般的相加,由于相加前段基址已经左移4位,变成20位了(最低4位是0),而偏移还是16位,所以,其实是段基址和偏移的高12位相加,偏移的低4位不变。转载 2022-09-13 16:39:47 · 802 阅读 · 0 评论 -
Drawing the Stack
【代码】Drawing the Stack。原创 2022-09-13 10:56:04 · 175 阅读 · 0 评论 -
绘制函数堆栈
现在我们可以看到程序集,我们可以准确地绘制出堆栈的外观,并更好地了解我们的代码在做什么。绘制堆栈的一个实际用途是用于调试,但它也是一个有趣的练习(这就是产生这个主题的原因)!这个例子很简单(但仍然需要一个冗长的帖子),但你可以为任何你想要的东西做这个。这种方式使用也是一种设置和使用局部变量的方法,我们稍后会谈到。正如我们将看到的,这是通过减去一些字节数 0xn 来完成的,它。,指向“最后一个字节”:这特别是您指定大小的最后一个字节。在这一行中,我们可以看到已经分配了 16 个字节,方法是。原创 2022-09-13 10:52:14 · 255 阅读 · 0 评论 -
mov DWORD PTR [rbp-0xc],0xa
【代码】mov DWORD PTR [rbp-0xc],0xa。原创 2022-09-12 20:26:17 · 383 阅读 · 0 评论 -
汇编语言入门七:函数调用(一)
汇编中发生函数调用相关的指令call和retcall指令会产生跳转动作,与jmp不同的是,call之后可以通过ret指令跳回来call和ret的配合是依靠保存eip的值到栈里,返回时恢复eip实现的esp记录着当前栈顶所在的位置,每次call和ret执行都会伴随着入栈和出栈,也就是esp会发生变化函数调用最基本的”跳转“和”返回“就这么回事了,下回咱们继续分析”函数调用中的参数传递、返回值和状态“相关的问题。文中若有疏漏或是不当之处,欢迎指正。原创 2022-09-12 10:28:26 · 1807 阅读 · 0 评论 -
汇编语言入门六:流程控制(二)
比较跳转只是,分支结构的程序中,所有的跳转目标都是往后,程序一去不复返。而循环结构中,程序会根据条件往前跳转,跳回去执行已经执行过的代码,在绕圈圈,就成循环了。到汇编层面,本质上,没啥区别。好了,汇编语言中的流程控制,基本就算完事儿了,实际上,在汇编语言中,抓住根本的东西就行了,剩下的就是靠脑子想象了。文中若有疏漏之处,欢迎指正。转载 2022-09-10 10:43:11 · 124 阅读 · 0 评论 -
C goto 语句
【代码】C goto 语句。原创 2022-09-09 16:04:36 · 159 阅读 · 0 评论 -
汇编语言入门五:流程控制(一)
这回着重说到了汇编语言中与流程控制相关的内容。eip寄存器指示着CPU接下来要执行哪里的代码一系列跳转指令,跳转指令根本上就是修改了eip比较指令,比较指令实际上是在做减法,然后把结果的一些状态放到eflags寄存器中eflags寄存器的作用条件跳转指令也就是根据eflags中的信息来决定是否跳转当然,这里讲述的仅仅是一部分相关的指令,带领读者对这部分内容有一个直观的认识。x86标志寄存器x86影响标志寄存器的指令x86跳转指令。转载 2022-09-09 10:25:16 · 297 阅读 · 0 评论 -
汇编语言入门四:打通C和汇编语言
好了,到这里,我们通过nasm、gcc和gdb,将一个简单的C程序,用汇编语言等价地实现出来了。C程序在编译阶段,在逻辑上,会被转化成等价的汇编程序汇编程序经过编译器内置(或外置)的汇编器,编译成机器指令(到可执行文件的过程中还有一个链接阶段,后面再提)我们可以通过gdb反汇编得知一个C程序的汇编形式。转载 2022-09-09 08:38:22 · 367 阅读 · 0 评论 -
汇编动态调试
反汇编这里插播一段反汇编的讲解。引入调试器和反汇编工具,我们后续将有更多机会对程序进行深入的分析,现阶段,我们先找一个简单的程序上手,熟悉一下操作和工具。OK,到这里,程序是对的了。gdb ./test(gdb)这一步是把反汇编的格式调整称为intel的格式,稍后完事儿后你可以尝试不用这个设置,看看是什么效果。好了,整个程序就在这里被反汇编出来了,请你先仔细看一看,是不是和我们写的源代码差不多?(后面多了两行汇编,你把它们当成路人甲看待就行了,不用理它)。转载 2022-09-08 16:07:00 · 559 阅读 · 0 评论 -
反汇编 (四)
这里插播一段反汇编的讲解。引入调试器和反汇编工具,我们后续将有更多机会对程序进行深入的分析,现阶段,我们先找一个简单的程序上手,熟悉一下操作和工具。好了,整个程序就在这里被反汇编出来了,请你先仔细看一看,是不是和我们写的源代码差不多?(后面多了两行汇编,你把它们当成路人甲看待就行了,不用理它)。这一步是把反汇编的格式调整称为intel的格式,稍后完事儿后你可以尝试不用这个设置,看看是什么效果。OK,到这里,程序是对的了。转载 2022-09-08 09:22:15 · 322 阅读 · 0 评论 -
汇编 调用内存 (三)
第一行先不管是表示接下来的内容经过编译后,会放到可执行文件的数据区域,同时也会随着程序启动的时候,分配对应的内存。第二行就是描述真实的数据的关键所在里,这一行的意思是开辟一块4字节的空间,并且里面用0填充。原创 2022-09-08 09:07:53 · 110 阅读 · 0 评论 -
汇编语言入门二:环境有了先过把瘾
到这里,赶紧根据前面了解的东西,多写几遍吧,加深一下印象。前面说的学习汇编没用,是瞎说的。学习汇编有用,后面想起来了再说。转载 2022-09-07 16:44:16 · 129 阅读 · 0 评论 -
汇编语言入门一:环境准备
现阶段,找个方便好使的编程环境还是比较蛋疼的,对于部分想过瘾或者想从学习实践中学习的小伙伴来说,略显蛋疼。不过,仔细琢磨,还是能够自己折腾出一个好用的环境来的。开搞。转载 2022-09-07 16:41:55 · 229 阅读 · 0 评论 -
汇编语言入门三:是时候上内存了
好了,这次就到这里结束,内容有点多,没关系可以慢慢来,没事的时候就翻出来,把目前学的汇编语言和gdb都好好玩一下,最好是能玩出花来,这样才能有更多的收获。通过mov指令可以把内存的数据放到寄存器中,也可以把寄存器的数据放回到内存在操作系统的保护下,程序是不能随便到处访问内存的,乱搞的话会GGgdb的功能很牛逼若读者对文中部分内容有疑惑或是有表达不当或是有疏漏,欢迎指正。转载 2022-09-07 16:05:12 · 332 阅读 · 0 评论 -
汇编 加法(二)
【代码】汇编 加法(二)原创 2022-09-07 13:59:58 · 212 阅读 · 0 评论 -
汇编入门 (一)
【代码】汇编入门 (一)原创 2022-09-07 13:41:04 · 135 阅读 · 0 评论 -
hello world 汇编
【代码】hello world 汇编。原创 2022-09-06 18:08:05 · 129 阅读 · 0 评论 -
有符号二进制数--补码
link 1.计算机内,有符号数的3种表示方法:原码,反码,补码。 (1)最高位为符号位,“0”为正,“1”为负,其余位为数值大小。 (2)反码:正数 反码 = 原码;原创 2022-04-06 11:14:23 · 5161 阅读 · 0 评论