- 博客(44)
- 资源 (43)
- 收藏
- 关注
转载 深入分析fork的执行过程(Linux-0.11内核)
在上一篇文章中简单分析了fork、pause等系统调用的实现,怀着对fork在父子进程中返回不同值的好奇,本文中将深入分析fork的执行过程以及如何实现在父子进程中返回不一样的值(父进程---子进程ID,子进程----0)。 为了分析fork,可以从它定义处开始一步一步的分析它执行的过程以及堆栈内容的变化。下面从syscall0(int,fork)展开后的结果: static inline int fork(void) { long __res; ...
2021-07-26 16:21:17 803
原创 读system到0x10000地址上
读system到0x10000地址上rp_read是开始读数据,或者改变磁头和磁道重新读数据,调用ok1_read,如果system数据读完就返回。ok1_read算出磁道上没有读的剩余扇区,然后调用ok2_read。Ok2_read调用read_track通过int 0x13真正读取数据,并把磁头指向1磁头,并调用Ok4_read,如果磁头1读完后磁道+1并继续执行ok4_read。Ok4_read保存磁头,并清空已读扇区数Ok3_read判断基地址,如果大于等于6...
2021-07-25 06:31:00 395 3
转载 BOCHS 调式命令大全
[执行控制]c|cont 向下执行,相当于WinDBG的“g”。s|step|stepi [count] 单步执行,相当于WinDBG的“t”,count 默认为 1。p|n|next 单步执行,类似于WinDBG的“p”。q|quit|exit 退出调试,同时关闭虚拟机。Ctrl-C 结束执行状态,返回调试器提示符。Ctrl-D...
2021-07-25 03:35:54 1206
转载 Bochs调试Linux内核
总结:cmd进入Bochs安装路径后运行如下命令bochsdbg -q -f bochsrc.bxrc调试的命令主要包括:vbreak 地址 打断点,配合c执行到该地址info r # 查看当前CPU寄存器的内容(例如:info eflags)u /10 # 反汇编从当前地址开始的10条指令。print-stack...
2021-07-25 01:27:23 814
转载 Linux vim 删除方法总结
本篇文章主要记录一下linux vim中的删除方法,包括删除单词,删除行,删除全部,删除某段内容,删除字符等操作。1.打开文件vi filename以下所有输入均在命令模式下:2.转到文件结尾G或转到第9行9G3.删除所有内容(先用G转到文件尾) ,使用::1,.d或者删除第9行到第200行的内容(先用200G转到第200行) ,使用:9,.d4.删除光标所在处字符x5.删除光标所在前字符(大写 X )X6.删除到下一个单词开头dw...
2021-07-24 23:44:09 12955
原创 linux命令
linux共享window文件命令share命令sudo mount –t vboxsf rocshare /mnt/shared获取root权限命令:su
2021-07-24 22:44:31 62
转载 汇编dup指令
dup 要与dd,dw,db配合使用,用来重复定义数据例子:db 3 dup (0)定义了3个字节,它们都是0,相当于 db 0,0,0db 3 dup (0,1,2)定义了9个字节,它们是0、1、2、0、1、2、0、1、2相当于 db 0,1,2,0,1,2,0,1,2db 3 dup('abc','ABC')定义了18个字符,它们是 ‘abcABCabcABCabcABC’相当于 db ‘abcABCabcABCabcABC’...
2021-07-23 11:32:22 15194 1
转载 汇编中基本的数据类型
、字节(DB)define byte一个字节有8位二进制组成,其最高位是第7位,最低位是第0位。在表示有符号数时,最高位就是符号位。00001001 =910001011 = -11 有符号 = 139 无符号通常情况下,存储器按字节编址,读写存储器的最小信息单位就是一个字节。Var_byte db 10011101BVar_bytes db 41H,42D,61H那么一...
2021-07-23 11:24:59 2011
转载 汇编lea
LEA是微机8086/8088系列的一条指令,取自英语Load effect address——取有效地址,也就是取偏移地址。在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与偏移地址之和得到。 取偏移地址指令 指令格式如下: LEA reg16,mem LEA指令将存储器操作数mem的4位16进制偏移地址送到指定的寄存器。这里,源操作数必须是存储器操作数,目标操作数必须是16位通用寄存器。因该寄存器常用来作为地址指针,故在此最好选用四个间址寄存器BX,BP,SI,
2021-07-23 11:18:34 4165
转载 汇编lss指令
在书上看到:lss init_stack, %esp网上对于lss指令的解释是:lss reg16, mem32即mem32位数的低16位传入reg,高16位传入ss.但这显然与书上的代码不符.因为init_stack是一个常量后来意识到书上的代码是AT&T汇编,所以应理解为init_stack的低16位传入esp,高16位传入ss....
2021-07-23 11:08:44 1627
转载 inc和dec指令
inc 加1指令dec 减1指令一、加一指令incinc a 相当于 add a,1 //i++优点 速度比add指令快,占用空间小这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位.二、减一指令decdec a 相当于 sub a,1 004012D7 > 83E8 01 SUB EAX,1004012DA 836D FC 01 SUB DWORD PTR SS:[EBP-4],1004012DE .
2021-07-23 10:41:45 12009
原创 8259中断控制器
1、中断控制器的框架图2、中断控制器的端口当A0是0时芯片的端口是0x20和0xA0(从芯片),当A0是1时端口是0x21和0xA1,3、ICW1ICW1在linux0.11用于设置多个8259连用 mov al,11h ;// 11 表示初始化命令开始,是ICW1 命令字,表示边 ;// 沿触发、多片8259 级连、最后要发送ICW4 命令字。 out 20h,al ;// 发送到...
2021-07-22 18:42:12 1295 1
转载 BIOS int 13H中断介绍
BIOS int 13H中断也叫直接磁盘服务(Direct Disk Service),该中断的各个功能号及对应的功能描述如下:1、功能 00H功能描述:磁盘系统复位入口参数:AH=00HDL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明2、功能 01H功能描述:读取磁盘系统状态入口参数:AH=01HDL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘出.
2021-07-20 19:54:32 2851
转载 INT 10H 中断简介
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 10H。底下是它们的说明: AH 功 能 调用参数 返回参数 / 注释 1 .
2021-07-20 19:51:23 3472 1
转载 lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)
lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)-->lodsb 指令:从esi 指向的源地址中逐一读取一个字符,送入AL 中; (然后,可以先判断这个字符是什么字符,如0dh,0ah 之类等,再执行相应的操作);-->stosb 指令:一般跟随在lodsb 指令后面,将AL 中的字符逐一写入edi 指向的目的地址;当方向标志位D=0时,则esi自动增加;D=1时,esi自动减小。类似有:-->如果是lodsw ,表明要处理的是字,而不是...
2021-07-20 19:42:19 1886
转载 2021-07-20
BIOS int 13H中断也叫直接磁盘服务(Direct Disk Service),该中断的各个功能号及对应的功能描述如下:1、功能 00H功能描述:磁盘系统复位入口参数:AH=00HDL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明2、功能 01H功能描述:读取磁盘系统状态入口参数:AH=01HDL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘..
2021-07-20 19:40:49 184
转载 状态寄存器OF,CF,ZF,test,cmp的应用
一、状态寄存器首先看看:状态寄存器(即标志寄存器)PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:条件码:①OF(Overflow Flag)溢出标志,溢出时为1,否则置0.标明一个溢出了的计算,如:结构和目标不匹配。②SF(Sign Flag)符号标志,结果为负时置1,否则置0。③ZF(Zero Flag)零标志,运算结果为0时置1,否则置0。④CF(Carry Flag)进位标志
2021-07-19 10:57:41 2068
转载 CLD汇编指令
cld相对应的指令是std,二者均是用来操作方向标志位DF(Direction Flag)。cld使DF 复位,即是让DF=0,std使DF置位,即DF=1.这两个指令用于串操作指令中。通过执行cld或std指令可以控制方向标志DF,决定内存地址是增大(DF=0,向高地址增加)还是减小(DF=1,向地地址减小)。串操作指令寻址方式有点特殊: 源操作数和目的操作数分别使用寄存器(e)si和(e)di进行间接寻址;没执行一次串操作,源指针(e)si和目的指针(e)di将自动...
2021-07-19 10:44:48 5681
转载 汇编指令CLI/STI
CLI禁止中断发生STI允许中断发生 这两个指令只能在内核模式下执行,不可以在用户模式下执行;而且在内核模式下执行时,应该尽可能快的恢复中断,因为CLI会禁用硬件中断,若长时间禁止中断会影响其他动作的执行(如移动鼠标等等),系统就会变得不稳定。在标志寄存器中中断标志清零的情况下,可以以“int ××”的形式调用软中断。 程序员可以改变段地址和偏移地址,但是在这个过程中如果需要改变段寄存器SS和SP必须禁止中断,当改变完成后再恢复中断(也就是说在cli指令后需要有与其配对...
2021-07-19 10:37:20 3306
原创 bios中断13,功能号15检测硬盘是否存在
;// 检查系统是否存在第2 个硬盘,如果不存在则第2 个表清零。;// 利用BIOS 中断调用13 的取盘类型功能。;// 功能号ah = 15;;// 输入:dl = 驱动器号(8X 是硬盘:80 指第1 个硬盘,81 第2 个硬盘);// 输出:ah = 类型码;00 --没有这个盘,CF 置位; 01 --是软驱,没有change-line 支持;;// 02--是软驱(或其它可移动设备),有change-line 支持; 03 --是硬盘。 mov ax,1500h...
2021-07-19 10:21:13 120
原创 获取硬盘信息
lds把存储器地址存到16位寄存器中。;// 取第一个硬盘的信息(复制硬盘参数表)。;// 第1 个硬盘参数表的首地址竟然是中断向量41 的向量值!而第2 个硬盘;// 参数表紧接第1 个表的后面,中断向量46 的向量值也指向这第2 个硬盘;// 的参数表首址。表的长度是16 个字节(10)。;// 下面两段程序分别复制BIOS 有关两个硬盘的参数表,90080 处存放第1 个;// 硬盘的表,90090 处存放第2 个硬盘的表。 mov ax,0000h mov ...
2021-07-19 10:12:23 195
原创 bios中断10,功能号12显示方式
;// 检查显示方式(EGA/VGA)并取参数。;// 调用BIOS 中断10,附加功能选择-取方式信息;// 功能号:ah = 12,bl = 10;// 返回:bh = 显示状态;// (00 - 彩色模式,I/O 端口=3dX);// (01 - 单色模式,I/O 端口=3bX);// bl = 安装的显示内存;// (00 - 64k, 01 - 128k, 02 - 192k, 03 = 256k);// cx = 显示卡特性参数(参见程序后的说明)。 mov ah,...
2021-07-19 09:52:29 211
原创 bios中断0x10,功能号0显示模式
;// 下面这段用于取显示卡当前显示模式。;// 调用BIOS 中断10,功能号ah = 0f;// 返回:ah = 字符列数,al = 显示模式,bh = 当前显示页。;// 90004(1 字)存放当前页,90006 显示模式,90007 字符列数。 mov ah,0fh int 10h mov ds:[4],bx ;// bh = display page mov ds:[6],ax ;// al = video...
2021-07-19 09:48:21 389
原创 获取扩展内存大小
mov ah,88h ;// 这3句取扩展内存的大小值(KB)。 int 15h ;// 是调用中断15,功能号ah = 88 mov ds:[2],ax ;// 返回:ax = 从100000(1M)处开始的扩展内存大小(KB)。 ;// 若出错则CF 置位,ax = 出错码。...
2021-07-19 09:43:31 105
原创 通过int 0x13取得磁盘参数
;/* 取磁盘驱动器的参数,特别是每道的扇区数量。; 取磁盘驱动器参数INT 13h调用格式和返回信息如下:; ah = 08h dl = 驱动器号(如果是硬盘则要置位7为1)。; 返回信息:; 如果出错则CF置位,并且ah = 状态码。; ah = 0, al = 0, bl = 驱动器类型(AT/PS2); ch = 最大磁道号的低8位,cl = 每磁道最大扇区数(位0-5),最大磁道号高2位(位6-7); dh = 最大磁头数,...
2021-07-15 16:20:07 456
转载 jnc的作用
比如 CMP AX,0JNC EXITEIXT:意思是CF=0,则跳转 ,表示的是AX大于或等于0的时候转移到EXIT处所以JNC也可以看成是加法没有进位,减法没有借位的时候转移
2021-07-15 15:51:26 5687
转载 标志位寄存器与CF、OF标志位的区分
8086CPU的flag寄存器(16位)各标志位如下(这是32位EFLAG的低十六位图,但是32位与16位是一样的,只不过32位多了16位且高16位没有使用到):这里写图片描述标志位寄存器中保存的是当前指令运算的信息状态,比如进位信息保存在CF标志位(注意:是运算结果的标志,比如add、sub、mul、div、and、or等,而mov、push等不会改变标志位)。**需要强调一点:**PF标志位,是奇偶标志位,但是这个奇偶指的是最低八位是奇数还是偶数,和高位没有关系。即使是16位寄存器/16位内存/
2021-07-15 15:45:36 3496
原创 使用bios 0x13中断从磁盘读取到内存
;// INT 13h 的使用方法如下: ;// ah = 02h - 读磁盘扇区到内存;al = 需要读出的扇区数量; ;// ch = 磁道(柱面)号的低8位; cl = 开始扇区(0-5位),磁道号高2位(6-7); ;// dh = 磁头号; dl = 驱动器号(如果是硬盘则要置为7); ;// es:bx ->指向数据缓冲区; 如果出错则CF标志置位。汇编的代码如下: mov dx,0000...
2021-07-15 14:44:48 797
原创 si,di,ds,es寄存器
ds和es是段寄存器,si和di是变址寄存器ds和si组成:ds:si es和di组成:es:di常用把地址的值赋值给另地址。ds:si ==》es:di这里还应用到cx,表示赋值的长度。其过程就是:伪代码如下:while(1){[es:di] = [ds:si]di++si++cx--}其汇编如下: mov ax,0 ;// 将ds段寄存器置为00h mov ds,ax mov ax,0...
2021-07-15 10:31:24 7071
原创 进程和内存关系
启动一个进程时候,首先调用fork,申请内存用于存储页表项,然后该页表项赋值父进程的页表项,一个进程需要的页表项空间:64M/4M*4K=64K,64个进程全部启动需要的页表空间:64K*64=4M。16M(全部物理内存)-4M(高速缓存+内核)-4M(页表项)=8M,还剩8M用于程序。进程启动后有写操作就会调用写时赋值,写时赋值就会申请一页物理内容,如果需要硬盘的数据,还会把硬盘的数据通过文件管理读到高速缓存中,然后同步到该申请的内容。...
2021-07-13 12:00:48 1083
原创 linux0.11进程最大个数为64
首先是线性地址限制了:一个进程64M,而线性地址最大值是4G,4G/64M=64页目录限制:一个进程64M,一个页目录项能管理4M,64M/4M=16,而页目录项最大是1024项,1024/16=64。
2021-07-13 11:34:23 282
原创 linux0.11段地址-线性地址-物理地址
段地址到线性地址的转换:根据段寄存器TR获取段选择符,该选择会GDT中找到对应的段描述符,段描述符会给出基地址,然后用该基地址+偏移量(si,sp等变址寄存器)就会得到线性地址。线性地址到物理地址:根据控制寄存器CR3得到页目录的基地址,该基地址+偏移量(线性地址的22~31位)得到页目录项;该页目录项的内容保存着页表的基地址,页表的基地址+偏移量(线性地址的12~21位)得到物理地址的基地址,物理的基地址+偏移量(线性地址的0~11位)得到每个字节的真实物理地址。转换图如下:..
2021-07-13 11:22:40 261
原创 string 的compare函数源码解析
调用compare的函数说明:int compare(const _Elem *_Ptr) //compare调用,如果返回结果是1就大于Ptr,如果是-1小于Ptr,如果是0两个字符串相等。例子:string str="abc";string str1="abd";if(str.compare(str)==0){printf("两个字符串相等\n");}else{printf("两个字符串不相等");}函数源码解析:该函数会调用重载函数compa
2021-07-08 17:05:25 1548
转载 2021-07-08操作系统知识:程序计数器(pc)、指令寄存器(IR)、通用寄存器(GR)、状态寄存器(SR)、程序状态字PSW
操作系统知识:程序计数器(pc)、指令寄存器(IR)、通用寄存器(GR)、状态寄存器(SR)、程序状态字PSW快乐的一只小喵喵 2019-10-28 16:43:01 14046 收藏 96分类专栏: 考试 操作系统 文章标签: 寄存器版权 程序计数器(PC,Program counter),用于存放指令的地址。为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器...
2021-07-08 12:02:41 4491
原创 Windows创建线程
static DWORD LockManager(void *arg){ while(1) { }}CreateThread(0, 0 ,(LPTHREAD_START_ROUTINE)LockManager,0,0,0);
2021-07-08 11:02:34 125
加密、安全与软件注册,数据加密技术, 使用MD5算法对密码进行加密
2021-07-13
13 Web编程.zip
2021-07-13
12 网络开发技术.zip
2021-07-13
硬件相关开发技术,将密码写入加密狗,读取IC卡中的数据
2021-07-13
打印与报表技术打印简历,打印汇款单,打印信封标签
2021-07-13
SQL查询相关技术,通 用 查 询,周期、日期查询
2021-07-13
数据库技术, 图片、多媒体数据录入技术
2021-07-13
注册表, 隐藏、显示“我的电脑”、“回收站”、“网上邻居”, 隐藏、显示驱动器
2021-07-13
06 操作系统与Windows相关程序.zip
2021-07-13
文件系统,文 件 管 理,加密与解密
2021-07-13
图形技术及绘 制 图 形,图 像 预 览
2021-07-13
按钮控件典型实例,编辑框控件典型实例
2021-07-13
01 窗体与界面设计.zip
2021-07-13
操作系统的bios操作,磁盘信息,软硬件中断
2021-07-08
图形图像,基本图形,图形动画
2021-07-08
库函数调用时间转换,字符串,数学函数
2021-07-08
文件操作包括文件读写,内容操作
2021-07-08
c语言数学应用矩阵整数
2021-07-08
算 法,排序算法,查询算法
2021-07-08
数据结构的结构体,树,图
2021-07-08
c语言基础知识用到的算法,打印
2021-07-08
TestXml.rar
2020-06-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人