自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

进击的小学生

To be or not to be, this is a question.

  • 博客(26)
  • 资源 (10)
  • 论坛 (1)
  • 收藏
  • 关注

原创 操作系统修炼指南——保护模式

环境搭建000 实验环境搭建保护模式001 保护模式 002 段寄存器 003 段选择子与段描述符结构 004 段描述符属性分析 005 特权级 006 数据段权限检查 007 代码段权限检查与 jmp 008 跨段提权与调用门 009 调用门(无参) 010 调用门(有参) 011 中断门 012 陷阱门 013

2016-09-14 15:45:01 8688 12

原创 0-实验环境搭建

工具下载安装 WinDbg安装VM在VM里安装XPXP 上的配置VM 上的配置WinDbg 配置测试工欲善其事,必先利其器。开篇要做的,当然是实验环境的搭建。工具下载https://yunpan.cn/ckI5hiW739Ipy 访问密码 8558安装 WinDbg此处省略 512 字节……安装VM此处省略 1024 字节……在VM里安装XP此处省略 65535 字节……XP 上的

2016-09-30 11:45:49 2426 3

转载 浅谈 TCP/IP 网络编程中 socket 的行为

来源:PromisE_谢 链接:www.cnblogs.com/promise6522/archive/2012/03/03/2377935.html我认为,想要熟练掌握 Linux 下的 TCP/IP 网络编程,至少有三个层面的知识需要熟悉: TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等) Socket I/O系统调用(重点如read/write),这是

2016-09-29 10:27:47 720

原创 18-线性地址转换实验

概述上一篇介绍了有关页的概念,以及线性地址转换物理地址过程。受于篇幅限制,抱歉我把实验部分放在了这里。如果你觉得上一篇看完还是晕晕的,那这里的实验希望你能好好做一下。实验内容很简单,用 malloc 申请一段内存,然后往这段内存写点数据,顺便查看下申请的这段内存的地址是多少,接着,中断到 WinDbg 中,使用线性地址转换方法,找到这个线性地址对应的物理地址,并验证这段物理地址中保存的数据就是你在程

2016-09-27 23:02:56 1742 1

原创 17-分页

概述苦苦挣扎几近半月,保护模式中的段的篇章基本结束。迈过这个坑,踏过这个坎,前方还有千千万万个坑。只要坚持,一定可以走完。本篇开始进入新的篇章——页。不得不说,页在现代操作系统中起着无法动遥的地位,是实现现代操作系统的重要基础(当然,段也很重要)。你完全可以不用理解这句话,因为到目前为止,我们并没有进入操作系统正题。逻辑地址、线性地址与物理地址咳咳咳…一下子冒出这么多概念真的好吗?忍耐,我从简说。

2016-09-27 12:20:04 2392 5

原创 8-文件IO-fcntl函数

回忆文件表还记得在第7篇文章提到过,阻塞与非阻塞是文件本身的属性吗?再回想一下,第6篇《文件IO-lseek》中提到的一些内核数据结构,每个描述符是某个数组的一个索引,这个数组每个元素保存了一个指向文件表的指针。这个文件表的结构如下。struct file { unsigned short f_mode; // 文件权限位 unsigned short f_flags; // 文件状

2016-09-25 21:24:02 2136 4

原创 7-文件IO-阻塞与非阻塞IO

1. 阻塞 IO通常来说,从普通文件读数据,无论你是采用 fscanf,fgets 也好,read 也好,一定会在有限的时间内返回。但是如果你从设备,比如终端(标准输入设备)读数据,只要没有遇到换行符(‘\n’),read 一定会“堵”在那而不返回。还有比如从网络读数据,如果网络一直没有数据到来,read 函数也会一直堵在那而不返回。read 的这种行为,称之为 block,一旦发生 bl...

2016-09-25 19:01:51 5057 5

原创 16-任务门实验

在第11篇《TSS切换实验》中,我们已经完成了使用 call 模拟了 TSS 的第二个功能——替换一堆寄存器。上一篇中,提到了任务门同样可以完成这个功能。本节主要通过设计任务门描述符以及INT指令来完成TSS的第二个功能。思路编写测试入口函数,把它的函数入口地址填写到 TSS 段中构造 TSS 段设计 TSS 段描述符,安装到 GDT 表设计任务门,安装到 IDT 表编写主函数,使用 IN

2016-09-25 14:31:29 1591 1

原创 15-任务门

任务门上一节已经基本掌握了使用 call/jmp 去访问一个任务段,来达到切换一堆寄存器的目的。但是,CPU同时又提供了另一种方法让我们访问任务段——任务门。而任务门是安装在 IDT 表中的。之前学中断门的时候,就简单介绍了IDT表中可以安装中断门、陷阱门,还有一个当时只是稍微提了一下,那就是任务门。说白了就是想表达,IDT 表中只可以安装 3 种门:中断门、陷阱门和任务门。思考一下,既然都可以使用

2016-09-24 22:44:22 2970 6

原创 14-TSS切换实验

概述前面讲述了TSS有两个功能,提权的时候切换栈,需要用到TSS,另外执行 call/jmp 访问TSS段的时候,可以切换一堆寄存器。本节主要进行一个实验,来模拟第二个功能。实验思路编写测试入口函数构造TSS设计TSS段描述符并安装编写测试入口函数CPU利用 TSS 切换一堆寄存器后,转而就去执行 eip 所指向的指令,为了能够让CPU执行自己的代码,我们需要编写一个测试函数,把这个函数的地

2016-09-24 16:40:14 3458 18

原创 13-任务状态段(TSS)

任务状态段不要被名字所吓倒,它不过是一块位于内存中的结构体而已。有一点需要注意的是,不要把它和任务切换关联起来(切记),否则你会被搞晕,它只是位于内存中的一段数据。Intel 白皮书给出TSS在内存中的图是这样的,它保存了一些重要的值。 抽象成结构体就是下面这个样子。struct TSS { DWORD link, // 保存前一个 TSS 段选择子,使用 call 指令切换寄

2016-09-24 15:22:14 10965 5

原创 12-陷阱门

陷阱门的结构| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 字节|76543210|76543210|7 65 4 3210|76543210|76543210|76543210|76543210|76543210| 比特|-----------------|1|--|0|1111|--

2016-09-24 13:08:51 1675

原创 11-中断门

除了使用调用门进行提权,本篇的中断门显的更加重要。因为在 Windows 中,大量使用了中断门。中断门的结构| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 字节|76543210|76543210|7 65 4 3210|76543210|76543210|76543210|76543210

2016-09-24 11:55:14 4434 4

原创 6-文件IO-文件描述符与lseek

在讲 lseek 前,先讲讲上一节文件描述符这个遗留的问题。1. 文件描述符在上一节中,我们已经知道 open 函数返回一个整数,它在本进程中唯一的标识了一个文件。那么,它到底是怎样标识的呢?可以设想,在一个进程中,存在着一个大数组(记录了打开的文件),这个数组的索引号就是 open 函数返回的整数,而这个数组的每一项,记录了打开的文件相关信息。我们知道,在操作系统中,是通过进程控制块(PCB)来描

2016-09-17 20:04:58 3824 6

原创 5-文件IO-read/write/open

代码函数 openopen 函数的用法flag 选项示例函数 read函数 write完整代码小结本着在使用中学习的原则,现在提出一个需求,只使用 linux 系统接口来实现文件拷贝命令。在上一篇博文中,已经简单了解了库函数和系统接口的区别。本文将继续学习 write,另外还将学习另外两个系统接口 read 和 open.代码为了方便学习,我把所有的错误处理的代码删除了。如果你想看完整

2016-09-17 15:17:06 3560 3

原创 4-文件IO-从printf开始

本着从使用中学习原则,我不打算讲太多的细节,也不想讲太多有关内核的知识。但是适当的了解一点内核,对学习 linux 编程会非常有帮助。printf 在干什么学过C语言的朋友第一天学习的函数恐怕就是 printf("Hello world\n")了,无论是在 Windows下,还是 Linux 下,这个函数都能使用。对我们程序员来说,它的底层实现是透明的。而 printf ,就是所谓的 C 语言库函数

2016-09-17 11:36:49 3408 4

原创 3-共享库的创建与应用

要用到的文件生成动态库的命令使用动态库-fpic 选项要用到的文件文件树如下 . |-bin |-lib |-src |-add.c |-common.h |-main.c |-sub.c// 文件名:common.hint add(int a, int b);int sub(int a, int b);// 文件名:add.cint add

2016-09-15 19:44:26 2665 1

原创 2-静态库的创建与使用

生成静态库的指令 ar示例一个完整的生成 a 文件的例子编写源码生成 o 文件打包使用静态库客户端测试代码编译链接成最终的可执行文件生成静态库的指令 ar常用选项 选 项 说 明 d 从归档文件中删除文件 m[ab] 在归档文件中移动文件 p 打印在归档文件中找到的文件 q[f] 将文件快速追加到归档文件中 r[ab][f][u] 替换归

2016-09-15 16:29:53 3963 9

原创 1-gcc 选项

gcc 常用选项 -v :查看gcc版本号 -I:注意这是大写的 i,指定头文件目录,注意-I和目录之间没有空格 -c :只编译,生成.o文件,不进行链接 -g :包含调试信息 -On :n=0∼3 编译优化,n越大优化得越多 -Wall :提示更多警告信息 -D :编译时定义宏,注意-D和之间没有空格 -E :生成预处理文件 -M :生成.c文

2016-09-15 14:53:56 4254

原创 10-调用门(有参)实验

编写R0函数int g_a, g_b, g_c;__declspec(naked) void getParam(int a, int b, int c) { __asm { // int 3 // 取消注释可以在WinDbg中看R0栈数据 pushad // 0x20 B pushfd // 0x04 B //

2016-09-14 23:10:29 1898 3

原创 7- 代码段权限检查与 jmp

实现跨段:一致代码段(比当前权限高的)要求:CPL >= DPL 步骤:1. 在8003f048 处添加描述符 00cf9f00`0000ffff,该描述符描述的段为一致代码段,DPL = 0 命令 eq 8003f048 00cf9f00`0000ffff2. 打开 OD,修改当前指令为 jmp 48:0044420c3. 执行指令后跳转到了 0044420c 处,且 cs 变为

2016-09-14 15:39:47 2587 7

原创 6-数据段权限检查

不妨先来做个实验。打开 OD,双击第一行,把代码改成 mov ax, 0x20; mov ds, ax,然后按两下 F8 键(单步),发现很正常。如果你把代码改成 mov ax, 0x10; mov ds, ax,按两下 F8 后,代码跳转到了一个地址以 7 开头的地方去了。 图1 这两行可以正常执行 图2 第二行不能正常执行 图3 图2中的代码执行异常会跳到这里 为了搞

2016-09-14 15:33:07 1884 4

原创 4-段描述符属性分析

段描述符结构| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 字节|76543210|7 6 5 4 3210 |7 65 4 3210|76543210|76543210|76543210|76543210|76543210| 比特|--------|-|-|-|-|----

2016-09-14 15:28:15 3285 9

原创 3-段选择子与段描述符结构

段描述符与段选择子的结构段选择子结构段选择子一共有16位,结构如下:| 1 | 0 | 字节|7654321076543 2 10| 比特|-------------|-|--| 占位| INDEX |T|R | 含义| |I|P || | |L |INDEX:在GDT数组或LDT数组的索引号TI

2016-09-14 15:02:04 16747 3

原创 2-段寄存器

从 ds 说起段寄存器段寄存器有96位段寄存器数据来源从 ds 说起如果你稍稍懂一点汇编,当你执行下面这行代码的时候,它会把 32 位整数 5 写入到地址 0x0012f000 这个位置处。dword 就表示这是一个 double word 宽度的数,一个 word 是 16 bit.mov dword ptr ds:[0x0012f000], 5不要惊讶,不要因为不懂汇编而苦恼,接触多了,就

2016-09-14 14:50:05 5556 19

原创 9-调用门(无参)

编写 r0 函数 getData查看函数 getData 地址构造调用门描述符运行结果编写 r0 函数 getData该函数将运行在ring 0下,因为其中读取了高2G内存数据。在 main 函数执行长调用,注意VC6.0 不能直接写 call 0x48:0,编译不通过#include <windows.h>#include <stdio.h>WORD g_cs0, g_ss0, g

2016-09-14 14:34:50 2935 9

EasyDraw 3.0(事故树绘制)

EasyDraw 事故树软件,3.0 版本,完全免费。排版更加精致,支持生成 svg 矢量图,png/jpeg 图形。

2018-11-02

梯度下降法VS2008_C++

梯度下降法完整的VS2008代码。博客地址:http://blog.csdn.net/q1007729991/article/details/40382071

2014-10-23

事故树绘制软件easydraw免费V2.19

免费版本的事故软件,实现所有计算功能,节点自动调整,建树判错等功能!支持导出图片。

2013-12-13

GCC 内联汇编

gcc 内联汇编 1 AT&T 与 INTEL 的汇编语言语法的区别 1.1 大小写 1.2 操作数赋值方向 1.3 前缀 1.4 间接寻址语法 1.5 后缀 1.6 指令 2 GCC 内嵌汇编 2.1 简介 2.2 内嵌汇编举例 2.3 语法 2.3.1 汇编语句模板 2.3.2 输出部分 2.3.3 输入部分 2.3.4 限制字符 2.3.5 破坏描述部分 2.4GCC 如何编译内嵌汇编代码

2018-10-28

版本控制之道-使用 Git

程序员修炼三部曲第一部,Travis Swicegood 著,董越、付昭伟等译

2018-10-28

事故树绘制分析软件

简单易用,功能其全的一个事故树绘制分析软件,用以计算最小割集,最小径集,顶上事件概率,概率重要度,结构重要度,临界重要度,计算方法可选。 计算的结果可以保存到本地txt文本文件,方便您复制到您需要的地方,给您的论文写作也会带来极大方便。概率计算提供一套精确算法,可以根据您所提供的数据计算出精确结果。当然您也可以选择近似算法,本软件提供首项近似法和平均近似法的计算结果,给您多种选则。软件非常简单易用,自己几分钟就可以学会,谢谢您的使用!

2012-12-17

增强版事故树绘制与分析程序

1.完善建立事故树的过程 2.事故树节点自动排列,免去手工排列节点的烦恼 3.编号自动生成,免去手工编号的繁琐 4.自动检测是否有闭环回路,防止用户建立逻辑上错误的事故树 5.自动检测用户是否在一个事件下重复添加 6.相同事件下建立节点,会进行同步复制,提高建树效率 7.相同事件下删除节点,会进行同步删除 8.手工拖动节点时自动对齐 9.修改节点信息,所有相同节点进行同步修改 10.画布大小自定义 11.画布颜色,事件框颜色,门颜色,文字颜色可以自定义 12.完美的一键保存bmp图片功能 13.编码树与文字树一键切换 14.列出事件清单,方便用户一次性输入事件概率 15.完善顶上事件概率计算,提供最小割集逼近法,无重复基本事件计算法,首项近似法,以及事件状态组合法。 16.优化最小割集、径集算法,提高计算速度 17.结构重要度删除不必要的状态组合法,仅提供公式三计算结果 18.提高了概率重要度、关键重要度的计算精度

2013-04-19

汇编_单片机_matlab_Multisim等

注意:此为TXT文档,里面都有下载地址,你所要下载的东东都在我的u115网盘里! 静态反汇编工具W32Dasm.rar 51单片机种子全.rar win7系统工具.rar matlab详细教程.rar Multisim教程.exe 中国象棋经典残局《适情雅趣》_0.1.exe UltraEdit-32_V16.20.0.1009_汉化版(30天免费使用).exe 精美PPT模板_2009.11.30.zip VC6.0简体中文企业版.rar

2010-11-24

MFC 音乐播放器

基本上实现了常用的播放功能,可以自动下一首,通过音量条控制音量,实现时间进度栏,实现将添加到列表的歌曲文件列表存储到本地,下次启动的时候依然还在,更多功能等待你的发觉,不要说分高,学习才是王道,尊重作者的劳动成果,花了两天时间写的。

2012-12-12

k近邻_kd-tree_kd树_vs2008_C++代码

vs2008写的Kd树泛型算法,支持k近邻查询。

2014-12-15

--Allen--的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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