自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 pwn musl libc环境配置

pwn musl libc环境配置上网找不到能看的资料,太惨了。还是自己看手册把。原本是符号调试musl libc时碰到的困难,发现不知道怎么符号调试,后面询问别人看到要用dir命令。然后上网查发现并不能查到讲的清楚的。如果下面有写的有问题的,请大家指出。gdb dir命令手册起源源文件在编译时其实不能携带源代码(好像确实,以前以为-g命令就会带上源代码的)而且源代码可能会移动,因此gdb需要一种方法寻找源代码文件的位置。gdb默认会有一个寻找源文件的列表叫做source path。source

2021-10-21 00:33:24 1145

原创 部署ctf pwn题目的时候遇到的坑+经验总结

前言还是第一次部署pwn题目,这次一共使用了两个项目一个是ctfd,另一个是ctf-xinetd。重点大概记录一下两个东西咋用。ctfd编辑首页部分 目录栏里面的pagexinetd部署题目在bin目录下放好binary和flag(或者flag.txt以及其他的,用户ls之后就能看到这个文件夹的内容)修改ctf.xinetd文件中如下图所示的部分为可执行文件名称,也就是pwn题目的binary文件启动docker,使用的命令就是README中的sudo docker build -

2021-10-14 07:55:12 3187 2

原创 srop学习 rootersctf_2019_srop

rootersctf_2019_srop前置知识这里有必要讲一下什么是srop。ctf_wiki的描述这里我也简单说一下我的理解。就是内核处理信号(软中断)的时候,会将寄存器压栈到用户地址空间(这里有点小疑惑,因为内核切换进程的时候压栈是属于到内核地址空间,这里是用户地址空间)然后切换回来的时候,调用rt_sigreturnpop回来之前保存的寄存器等。那么我们只要拥有这个gardet,就可以控制程序执行流以及次奥用的系统调用的参数。而触发pop这些寄存器的方法就是直接调用这个rt_sigreturn

2021-10-12 00:29:25 515

原创 rctf_2019_babyheap、0ctf_2018_heapstorm2学习(house of storm)

0ctf_2018_heapstorm2这道题算是house of storm的起源。house of storm的原理其实就是:结合利用largebin attack和劫持unsortedbin后一个chunk的bk,实现把堆地址写入到任意地址,再结合unsortedbin的bk指针分配时只检查size而不检查chunk完整性(这里有点疑惑,unlink检查应该很严格,可能是绕过了而不是没有检查)分配到这个地址上(add(0x48))实现的结果和unlink差不多。具体利用条件:glibc2.3

2021-09-10 23:37:21 1433

原创 ciscn_2019_n_7(exit_hook)、wdb_2018_1st_babyheap(fsop的例子)

ciscn_2019_n_7 劫持exit_hook这道题考察比较单一,劫持exit_hook即可在ida里面看到,首先会在本地寻找一个log.txt,否则直接段错误。因此现在本地创建一个log.txt。写不写内容都可以。接下来是exit_hook的位置exit_hook的位置在libc-2.23中exit_hook = libc_base+0x5f0040+3848exit_hook = libc_base+0x5f0040+3856在libc-2.27中exit_hook = lib

2021-09-08 20:16:56 1207

原创 angr理论笔记(三)program state

program state在之前几章中,主要学习的是simulate state也就是模拟状态的程序运行状态。接下来将要学习的是state object也就是状态这个对象的性质(包含但不限于simulate state),并且学习如何和这个对象进行交互。基本执行首先简单介绍一下simulator的一些性质,具体性质将在下一章介绍。这里简单介绍一些性质。state.step()执行符号执行的一步,并返回一个simsuccessors和一般程序流执行不同,符号执行的一步将会返回许多结果,可以分为多种类

2021-09-04 13:51:43 472

原创 2021祥云杯部分pwn

note 格式化字符串本题考查了scanf的格式化字符串利用。一般我们用的都是printf的格式化字符串。这里是scanf踩坑一开始没有注意到sendline会多发一个换行符,导致往栈上$7的stdout写入的时候老是写不对,结果发现是多发了。scanf的格式化字符利用方式和printf的比较类似,就是不能直接输出。这里注意到栈上有stdout,可以直接往里面写入绕过判断输出libc_info的fbad1800。step1 获取libcpayload1 = p64(0xfbad1800)+p6

2021-09-03 14:43:11 666 4

原创 angr理论笔记(二)solver engine

solver engine简介angr的威力不在于模拟执行,而在于将输入抽象为符号,通过将符号(也就是静态或者全局变量的名称,局部变量在编译过程中不具有符号)以及符号的运行过程抽象为语法树,判断输出结果。就像z3的工作一样。我们在这一章中需要解决的问题是:我知道输出XXX所需要的操作序列是ABCD,那么我的输入应该是多少bit vectorbit vector可以说是模拟了c语言中对于整数的解析方式。例如将int转换为32bit的储存形式。称作bit-vector当然32位不是必须的,任意位

2021-09-02 14:42:48 514

原创 angr理论笔记(一)loading a binary

angr——loading a binary主要学习一些api,以及angr的使用。源代码阅读暂时不做考虑加载器、映射加载器主要起到将binary加载到固定空间的作用proj = angr.Project('examples/fauxware/fauxware')loader有一些api可供调用,可以通过此查看相应libc,加载器等>>> proj.loader.all_objects[<ELF Object fauxware, maps [0x400000:0x60

2021-09-01 17:56:46 283

原创 sctf_2019_easy_heap off-by-null劫持IO_FILE,理解 0ctf2015 free_note unsortedbin-double_free使用

分析以及漏洞点本身off-by-null没什么可以再说的,但是这道题没有show函数,就必须想到要劫持IO_FILE。但是之前就一直有个问题就是既然unsortedbin中地址无法取出,怎么能写到tcache或者fastbin中?之前许多题目因为正好有类似的漏洞,但感觉不是很普世。这次只有一个off-by-null就实现了这一点,因此看完之后恍然大悟。明白了一般性的劫持IO_FILE泄露libc的方法。关键点:构造chunk overlapping,之后用一个大的unsortedbin包裹住这个chun

2021-08-14 14:45:11 347

原创 bss上格式化字符串处理【buuoj】SWPUCTF_2019_login

这道题用了两种方法去做,一种是修改got表,零一种是修改返回值控制执行流。IDA分析很明显的格式化字符串漏洞,但是是在bss段上总结一下32位格式化字符串在bss段上的处理方法就是:寻找一个类似ebp的栈上寄存器,如下图通过修改这个ebp,可以修改上图0xffc78f38的值为想要的(记住:格式化字符串修改栈上指针指向区域的地址,因此是0xffc78f38)如果想要劫持got表,寻找下面80开头的数据(和got表比较相关)修改完后就可以变成下图这样(思考一下为什么要这么写:因为一般的格式化字符

2021-08-10 12:45:42 1098

原创 buuoj [2020 新春红包题]3 2.29下unsortedbin attack的替代方法——Tcache Stashing

IDA分析seccomp只允许orw程序没有开启canary,末尾有一个大小为0x10的溢出,可以构造栈迁移,栈迁移可以直接orw, 但是需要条件。需要满足这里的backdoor chunk中的部分内容值大小要求。这里的backdoor chunk是程序一开始申请的chunk,我们不能正常写入,看到这里其实可以想到unsortedbin attack。但是程序是glibc2.29,没有unsorted bin attack允许构造的chunk只能是0x10,0xf0,0x300,0x400这道题

2021-08-09 14:31:15 727 3

原创 2021dasctf七月赛 pwn题解复现(strdup,md5,protect,setcontext)

前言:算是第一次参加自己觉得能力匹配的比赛之前的0ctf,tctf的,感觉自己就像个混子,2021国赛参加的时候全程都在学没学过的堆,所以其实也没觉得自己能力赶得上。然而第一次打比赛嘛,总归是不可能会做的,不过也算是知道了,比赛也没有想象中的那么恐怖。本篇文章参考的wphttps://kr0emer.com/2021/08/04/DASCTF%20July%20X%20CBCTF%204th%20pwn/Easyheap保护全开,也开了沙箱,但是同时也开了一块RWX的段,地址是固定的0x233300

2021-08-09 13:40:16 962

原创 SWPUCTF_2019_p1KkHeap(负溢出tcache)de1ctf_2019_weapon(IO_FILE泄露libc)

SWPUCTF_2019_p1KkHeapIDA分析用IDA反编译发现,此题操作有如下限制顺便说一下,buu上的所有ubuntu18的题目都是带tcache-double-free的,其实这不太好,怕养成习惯这样解题。这里可以看到的是,对delete和add有明显的次数限制,不能简单的tcache-poisoning来泄露libc。本题一开始也是卡在这里,没有别的思路。之后参考了别人的wp,发现tcache的管理块其实存在一些漏洞。这里记录一下// tcache结构定义中的部分代码#if U

2021-08-04 21:48:13 400

原创 劫持vtable修改程序执行流——pwnable seethefile

前置知识vtablevtable是和file结构体并列的一段内容,是函数指针数组,其中包含了对file的一些操作函数。以下来自ctf-wiki在 libc2.23 版本下,32 位的 vtable 偏移为 0x94,64 位偏移为 0xd8以下是vtable的实际结构,如图所示,我们需要关注的是close部分。也就是关闭文件时将会调用的函数。## 劫持原理以下内容摘自https://www.jianshu.com/p/2e00afb01606分析close函数,最关键的利用点在这里注意

2021-07-22 22:47:18 386

原创 pwnable.tw tcache_tear

需要注意的:首先是free伪造的bss段上堆块的时候要伪造三个才能free,因为都会检查。其次是在这个版本的glibc下,tcache不会检查bins中size为,因此尽管free周围没有0x7f也可以伪造chunkfrom pwn import *# io = process('./tcache_tear')io = remote('chall.pwnable.tw',10207)context.log_level='debug'elf = ELF('./tcache_tear')libc

2021-07-21 21:13:09 221

原创 roarctf_2019_realloc_magic 详细学习理解 无show()利用IO_FILE输出+realloc分配实现

roarctf_2019_realloc_magic这道题从头到尾都是我的知识盲区…爆破,IO_FILE,realloc学习资料利用IO_FILE泄露libc原理IO_FILE泄露libc例题wp参考realloc重要知识静态分析可以看出程序只有对realloc的调用操作,只有add()和delete()没有泄露函数。一般堆题如果没有show()函数,plt里面也没有system,可以采用的方法是劫持IO_FILE泄露。IO_FILE劫持思路对于劫持IO_FILE的思路,我的理解是

2021-07-20 09:05:15 770

原创 2021 Picoctf pwn部分wp

首先说一下,是参考了校内学长的复盘讲解hhh,这也是第一次直接接触在线的ctf而不是靶场。Gauntlet1在ida里面看一下。这三道Gauntlet都是一个类型的,漏洞都是一个格式化字符串+栈溢出。那就很容易直接把shellcraft.sh()写道栈上,因为一开始给打印了背写区域的起始位置并且使可执行的栈,一溢出就会跳转到我们写的shellcraft上面执行。注意中间还要有个格式化字符串的额send,不要忘了,之前卡在这里好久啊。。。expfrom pwn import *context.

2021-07-18 19:01:24 531

原创 ciscn_2019_es_2 栈迁移(很好的例子)

ciscn_2019_es_2一道很好的栈迁移例题。之前看合天讲的虽然也涉及到原理,但是例子用的是攻防世界pwn200,溢出长度还是有点多。这次只能溢出ebp和retaddr,就很典型并且有挑战性。这题没做出来,看的wp,希望下次能自己做出来。题目给了两次溢出,这两次都是必要的。一般来说,第一次溢出需要泄露栈上地址用来给第二次做迁移使用,第二次执行栈迁移,控制ret跳转到我们所迁移的栈上,执行栈上填写的exp。由于第二次依然是在函数栈帧内输入,因此除非能自己read到bss上(通常能这样做的溢出空间也

2021-07-17 23:31:59 1220

原创 ciscn_2019_c_1

ciscn_2019_c_1太无语了这道题,现在也没整明白为什么超过buffer大小就不加密了,反正就…不加密了。其实可以通过\x00绕过strlen的检查。这里mark下这位师傅总结的输入函数截断方式可以看到的是,gets不是00,因此可以用strlen绕过这道题的libc可以用libcSearcher,注意要选第0个(坑死我了!!第二个libc_base也是正确的000结尾,但就是不对,害得我自己下的libc)此外就是栈平衡问题,ununtu18之后system会出现这个问题。一般本地调试进入sy

2021-07-16 23:09:10 404

原创 babyheap_0ctf_2017

babyheap_0ctf_2017虽然在buuoj比较前面的地方,但还是不能说简单。本来以为buuoj是根据题目难度给分,现在才知道是根据做出的人数。看来前面的题也要认真刷,说不定有经典的。这道题算是构造用的比较多,漏洞就是任意大小内存写的fill函数。一般的思路是劫持hook,需要泄露libc加载地址和写回malloc_hook操作。首先是泄露libc,采用的是unsortedbins中只有一个bins时,fd与bk指向内容和libc加载地址偏移量固定的特点。由于没有uaf,需要构造double

2021-07-15 16:43:56 254

原创 pwnable.tw hacknote

hacknote主要考察:uaf,fastbin数据结构分析程序流程可知,在add部分,创建的数据结构如下所示用图片直观表示,就是所有被分配的chunk数据结构都是puts块+数据块,并且puts块大小固定。注意到每次free的时候两个快都会被free,并且存在uaf,考虑在free两个块之后,一次malloc 0x8大小的内容,再执行show,那么malloc(0x8)时候调用的puts函数即可被劫持,因为0x10大小的块全被放在了一个fastbin中,我们add一个0x8的块,会从fastbi

2021-07-14 22:21:16 128

原创 buuctf hitcon_training,axb_2019_heap,unlink一般利用方法总结

两道都是使用了unlink并且两道题的方法一模一样,和上一篇的ZCTF的一道题也一样使用unlink的题目一般有这样的特征指针位置泄露(这三道题全都是在bss上的指针)存在off-by-one或者off-by-null以及其他溢出修改漏洞第一条用于控制unlink堆块的检验,第二条用于激活unlink,两者缺一不可。利用方法:制造unlink块,修改fd为ptr-0x18,bk为ptr-0x10,构造chunk_head和下一个chunk的prev_size,通过off修改下一个chun

2021-07-10 22:50:02 213

原创 buuctf GUESS,ZCTF note2学习

GUESS知识点stack smash\environ泄露栈地址题解这道题是一道栈题,好久没见栈题。可以看到程序会把flag读入内存,之后fork子进程让你猜。这里需要事先了解fork工作方式:把父进程虚拟内存空间完全复制一份(具体来说,私有写时复制)这说明子进程会复制flag,以及栈上所有内容。利用这一点以及题目给我们的三次机会,结合canary smash原理解题。stack smash之后会输出一串字符串,其地址是environ[0]。基本思路是通过gets()栈溢出,修改environ[

2021-07-09 22:11:15 286

原创 pwnable.tw calc

查看保护查看流程,calc主函数存在溢出,但由于canary可能比较难利用get_expr函数用来逐个读取输入,判断合法性接下来init_pool,用来初始化a中内容全部为0这里需要逆向一下,纪念一下我B+的pore,但是我还是爱你的一开始也没看出来,觉得这里写的没什么问题。测试了几个数字发现calc计算的也是正确的。感觉问题应该不会出在算法上,就没看算法。问题是出在这里,如果不输入第一个操作数,直接输入“+5”store也会读入,但是此时,store[0]=1,在eval里面计算时好,

2021-07-08 13:42:47 239

原创 pwnable.tw start,orw学习

暑假开始刷pwnable.twstart这个反编译出来一开始看蒙了,不知道在干啥。后来仔细看看字节码,发现是系统调用write输出的stack上的内容。后面是read函数,观察修改的寄存器内容发现是read系统调用,输入数据大小为0x3c然而buffer大小为0x14,这就产生了栈溢出。这里是把一个shellcode放到返回地址,那就需要知道返回的栈地址,这里比较巧妙。注意到这里将打印esp地址中的数据,只要返回ret的时候调用,就可以输出esp地址,在下一次放在re

2021-07-06 22:39:22 213

原创 32位ret2dlresolve学习

RET-2-DLRESOLVE学习笔记个人觉得这个算是对链接器工作,ELF文件利用比较深入的一个方法了,也是比较难的一个方法。从一开始说起:为什么会有这种攻击。最简单的ret2libc的原理,其实和这个很类似:都是利用加载器工作时对函数的载入机制。但是有时ret2libc不能使用(什么时候?当程序没有泄露函数puts或者system时,这时直接使用elf.plt[‘system’]会显示没有该函数的错误。)为了解决上面的问题:有人想出了更为神奇的方式:既然Libc使用的是“动态绑定机制”,那么在运行

2021-04-28 11:33:02 327

原创 攻防世界welpwn 通用gardet利用

welpwn题目在攻防世界。先查看一下保护,没有canary,用ida看一下程序流这里很像是栈溢出,但没有溢出。接着再看echo函数稍微逆向一下可以发现的是,eval内部有一个数组,把之前读入的0x400字节的前16个放到s2中。但是遇到0就推出了但是在64位系统中,是不能避免地址出现0的情况的。我们因此只能控制输入的第一个地址。因为第一个地址在小端法中是地址在前,0在后,因此可以被读入。这里感觉有点象是栈迁移的思路,好在这道题有别的方法,不用栈迁移这么复杂。观察到echo是在main中被

2021-04-14 17:37:20 197

原创 mrctf2020_shellcode_revenge|wustctf2020_name_your_cat|2018_gettingStart|SUCTF_2018_stack|wustctf2020

这五道题都异常简单。。。也不知道为啥wustctf2020_number_game这题大概是csapp第二章学好了直接连就可以了。v1=Tmin=-2147483648即可。因为32位有符号整数下Tmin是1000_0000_0000_0000,取反码加上1还是Tmin2018_gettingStart好吧,这道题还是CSAPP第二章知识直接运用。有一个简单的溢出覆盖,其实是考察浮点的位表示,写个c程序跑一下就出来了#include<stdio.h>int .

2021-04-05 21:08:58 410 2

原创 [buuctf]picoctf_2018_are you root未初始化漏洞

挺神奇的这道题,本地就是打不通,远程可以打通,绝了到底是为什么???本来以为这道题有一个指针置0的操作就没有UAF了,看来是我还见得太少,把UAF理解错了(其实我也没开始学堆哈哈哈哈)参考了网上师傅的解答,发现这里是一个未初始化漏洞。我画个栈帧大家就明白了先写一下函数长什么样栈帧长这样注意到一开始v6是一个二级指针,也就是指向数组的数组strtok分配的内容是存在*v6里面的,所以上述栈帧应该是对的那么在用完free之后呢,这里的指针归零是指:不能再用该指针寻

2021-04-02 10:35:02 301 1

原创 inndy_echo

这道题比较简单,一个fmtstr直接丢给你做,没有栈溢出,虽然也没有canary那就不管了,直接GOThijack注意到其实函数本身是调用了system函数的,因此可以在plt表中直接找到system函数写入GOT表中然后之前没注意,还尝试着把libc基址泄露之后把system的地址直接写回EXIT的GOT表中,尝试在发送EXIT之后调用。但是这样会导致不对齐的现象。。。除此之外本题还学到一个新的内容。我本来以为fmtstr要写的内容必须是严格递增的所以之前没有尝试去写print

2021-04-01 23:10:15 360

原创 PLT/GOT表在ctf pwn题目中的理解与运用 结合CSAPPchap7

由于之前没学过CSAPP第七章的时候,做pwn题时许多概念比如PLT表,GOT表,.BSS段这些概念都不很清楚,按照学长的方法照猫画虎也算是能做出来。如今学习的时候是带着当时的问题学完了这一章。因此做一个小总结,主要是对本章和pwn中关联度较大的部分做一个说明。网上讲到和GOThijack相关的题目时,大多是推荐阅读CSAPP和连接相关的章节。如果你翻到了这篇文章,那你也就不用再学习原著了 ????当然,如果像更深入的了解,还是推荐CSAPP的。因为毕竟不能面面俱到,并且或许也会有理解错的地方。理解

2021-04-01 16:44:34 1412 1

原创 buuctf[cmcc_pwnme1]题解

拿到题目,发现getflag函数和简单栈溢出高兴的尝试了一波,然而发现home目录下没有flag,倒是也正常,没有简单到这种程度看一下保护没有开,那也很简单,直接利用栈溢出,ret2libc即可使用LibcSearcher直接搜索,这题就当是熟练手感了from pwn import *from LibcSearcher import LibcSearchercontext.log_level='debug'# io=process('./pwnme1')io=rem

2021-03-26 23:12:59 315

原创 [BUUCTF]PWN——[极客大挑战 2019]Not Bad详细解释

从这道题可以学到shellcode的一般使用方法,和orw的一般方法这道题开启了secure computing mood使用seccomp看到可以使用的函数使用vmmap查看哪里可以写shellcodeIDA中也有看到使用vmmap开启了一段内存这里mmap参数类型是(起始地址,大小,保护类,文件描述符等)我们只需要关注保护类权限PROT_READ是0x1PROT_WRITE是0x2PROT_EXEC是0x4也就是read,write,execute的顺序,那么这里是6,也就是

2021-03-25 14:18:52 810 3

原创 64位格式化字符串漏洞利用——axb_2019_fmt64

题目可在buuoj上找到,不知道为啥现在github怎么也上不去了,传不了题目学了好多遍fmtstr了,感觉ctf这种学习就是。。。不学就会忘,不能停止做题目。。。64位fmtstr和32位不同之处在于1.传入地址可能存在0字符截断(32位由于字符数量少,可能没有这个问题)2.修改地址可能产生%xc中x过大导致网络异常就本题而言,会出现这两种情况首先使用IDA容易看出,这里有格式化字符串漏洞,64位使用一般方法确定偏移量容易看出这是第八个参数之后采用一般的got-hijack方法,泄露pu

2021-03-23 17:41:09 2700 11

原创 《实模式到保护模式》chap11 学习笔记(上(大部分))

进入保护模式在实模式中,用户对于内存单元的访问不受控制。只要将逻辑段地址和偏移地址设置正确,可以访问任何地方的数据。但是在保护模式下。一个用户不能访问其他用户的数据,不能修改操作系统的数据全局描述符表GDT在实模式下,任何程序访问,执行都是自由的。但是保护模式下则不然。用来限制这种自由的凭证就是全局描述符表。GDT在进入保护模式之前被定义程序中用来记录全局描述符表的寄存器是GDTR。该寄存器的组成如下线性基地址代表了内存中全局描述符表的起始位置。16位边界地址记录了全局描述符表的大小(总字节数)

2021-02-15 21:11:57 203

原创 《实模式到保护模式》chap10 学习笔记

chap10 x86处理器编程架构保护模式and实模式实模式:使用之前介绍的段寄存器+段偏移量的方式访问内存。也称为8086模式。此时数据大小是8位或16位的。保护模式:80286处理器:段寄存器中保存的不再是段地址,而是段选择子。真正的段地址位于段寄存器的描述符的高速缓存中,是24位的。这样一来,段就可以位于16MB(24位)空间中的任何位置。但是段偏移量只有16位80386处理器:处理器/寄存器变成32位,可以访问4GB的内存.每个段基址是32位的,段内偏移量也是32位的。所有后续80386

2021-02-14 13:00:11 117

原创 《实模式到保护模式》chap9 学习笔记

chap8本章习题答案retf和ret的区别就在于,ret是相对近转移,retf是远转移。ret只弹出指针寄存器IP而retf还要接着弹出段寄存器CS。知道了原理,就可以改写retf了。 ;源程序 begin: push word [es:code_1_segment] mov ax,continue push ax ;可以直接push continue,80386+

2021-02-13 13:35:38 132

原创 《实模式到保护模式》chap8 学习笔记(下)

第八章(下)加载用户程序因为程序需要决定要读取的扇区数目,首先需要确定整个程序的大小program_length dd program_end ;程序总长度[0x00],在8-2中mov dx,[2] ;加载器部分 mov ax,[0]接下来用存放在dx,ax寄存器中的内容除以512(存放在bx中)利用循环得到总扇区数目div bxcmp dx,0jnz @1 ;未除尽d

2021-02-09 23:19:27 169

原创 《实模式到保护模式》chap8 学习笔记(上)

chap8 硬盘和显卡的访问与控制(上)用户程序的结构处理器的工作模式每次在读取内存的时候,处理器会将内存分为逻辑上的段,指令的获取和数据的访问一律按照短地址:偏移地址的方式进行一个规范的程序,包括代码段,附加段,数据段和栈段NASM汇编器使用汇编指令SECTION或者SEGMENT来定义段SECTION 段名称等价于SEGMENT 段名称一旦定义段,后面的所有内容都属于该段。如果一个程序没有定义段,这些内容默认成为一个段如果程序不从定义一个段开始,那么这些内容默认成为一个段INTE

2021-02-08 22:21:49 195

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除