自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 自己动手写操作系统 - 环境配置

自己动手写操作系统 - 环境配置文章目录自己动手写操作系统 - 环境配置@[toc]VMware 15 Pro1.虚拟机安装kali (默认安装了NASM 汇编器)2.kali里边安装 bochs安装bochs 需要的环境安装bochs的freedos系统3.bochs 制作os img 的基本方法VMware 15 Pro1.虚拟机安装kali (默认安装了NASM 汇编器)2.kali里边安装 bochs安装bochs 需要的环境1.apt-get install build-esse

2020-06-11 01:20:02 274

原创 自己动手写操作系统 - 01 保护模式之段保护

自己动手写操作系统 - 01 保护模式之段保护文章目录自己动手写操作系统 - 01 保护模式之段保护@[toc]构造段描述符的宏定义段描述符结构段选择的结构初始化段描述符的代码段描述符的属性的相关说明段寻址示意图gdtr段描述符寄存器进入保护模式的总结构造段描述符的宏定义1. 要说到段,那么GDT是不可少的,说到GDT就要说到存储在GDT里的段描述符2. 那么说到段描述(我可就不困了),它是干什么的呢?甘宁来来的- ,03. 段描述符相当于描述一块地(内存),这块地的基址(地在哪儿),这块地的大小

2020-06-11 01:19:10 329

原创 Linux 系统编程 --GDB调试工具的基本使用

gdb 调试工具 基本使用文章目录gdb 调试工具 基本使用gdb 程序使用的大前提 ----- 程序是你自己编写的 用来修正你的**逻辑** 错误基本指令:其他指令:栈帧的理解GNU调试器(英语:GNU Debugger,缩写:GDB),是GNU软件系统中的标准调试器,此外GDB也是个具有移携性的调试器,经过移携需求的调修与重新编译,如今许多的类UNIX操作系统上都可以使用GDB,而现有GDB所能支持调试的编程语言有C、C++、Pascal以及FORTRAN。​ GDB还可以通过串口连接器 和

2020-05-21 14:26:49 138

原创 Linux 系统编程 - Makefile项目管理的基本使用

linux 系统编程 – makefile的基本使用make 命令 直接编译makefile 设置的脚本makefile : 管理项目一个规则 目标:依赖条件 (一个tab缩进)命令 1. 目标的时间必须晚于依赖条件的时间,否则,更新目标 //减少没有修改源码程序,减少了重复编译 2. 依赖条件如果不存在,找寻新的规则去产生依赖条件。 ​ 图解​ ​ 注意:如果依赖没有,会向下寻找,先执行对应生成依赖的规则ALL:指定 makefile 的终极目标。//make

2020-05-21 14:24:40 447

原创 linux 系统编程 动态库和静态库

静态库和动态库理论 对比文章目录静态库和动态库理论 对比静态库和动态库的比较评价:静态库静态库的制作静态库的使用和头文件的对应动态库动态库的制作 - 生成与位置无关二进制动态库加载错误原因 及 解决方式解决动态链接库 没有加载的4种方式数据段的合并静态库:在计算机科学中,静态库(英语:Static library, Statically-linked library),或称静态库,是一个外部函数与变量的集合体。静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期

2020-05-17 22:56:08 152

原创 Linux 系统编程 - GCC编译的四步流程

GCC编译器 四步流程文章目录GCC编译器 四步流程wiki编译流程图1.预处理后的hello ->hello.i:2.编译hello.c ->hello.s3.汇编 hello.c -> hello.o4.linked 链接总结wiki>**GNU编译器套装**(英语:**GNU Compiler Collection**,缩写为**GCC**),指一套[编程语言](https://zh.wikipedia.org/wiki/編程語言)[编译器](https://zh.wik

2020-05-16 23:34:11 677

原创 Linux 系统编程 Vim的基本操作

Linux 系统编程 Vim的基本操作文章目录Linux 系统编程 Vim的基本操作跳转到指定行:跳转文件首:跳转文件尾:自动格式化程序:大括号对应:光标移至行首:光标移至行尾:删除单个字符:替换单个字符:删除一个单词:删除光标至行尾:删除光标至行首:删除指定区域:删除指定1行:删除指定N行:复制一行:粘贴:查找:单行替换:通篇替换:指定行的替换:撤销、反撤销:分屏:跳转至 man 手册:查看宏定义:在末行模式执行shell命令:跳转到指定行:1. 88G (命令模式)2. :88 (末行模式

2020-05-16 22:40:35 125

原创 Linux 系统编程 - 基础01

Linux系统: “所见皆文件” (后缀名只是用来让人理解)文章目录Linux系统: “所见皆文件” (后缀名只是用来让人理解)Linux的 族谱:Linux系统目录:Linux系统文件类型: 7/8 种软连接:快捷方式硬链接:创建用户:修改文件所属用户:删除用户:创建用户组:修改文件所属用户组:删除组:使用chown 一次修改所有者和所属组:find命令:找文件grep命令:找文件内容软件安装:tar压缩:tar解压:rar压缩:rar解压:zip压缩:zip解压:Linux的 族谱:Linux系

2020-05-16 22:17:31 80

原创 中级 段寄存器

段寄存器:ES SS CS DS FS GS LDTR TR​读和写的区别读:只能读16位bit: mov ax,ds写:写的是96位bit: mov ds,ax1.怎么证明有段寄存器有96bit?2.写段寄存器的时候,只写了16bit?剩下的80bit呢?struct SegMent {WORD selector; //可见WORD attribute; //段的属性?//属性记录了该段是否有效,是否可读写等权限。如果往一个不可写的段执行写数据,//会报异常。DWORD ba

2020-05-15 22:00:26 259

原创 IAT Hook

ChookHook 三步走 WFH1. WHRER 你要hook的函数(地址)2. FIND 找到你的函数地址3. HOOK 这个函数作用修改数据(修改参数,修改返回值)改变被hook函数行为考虑这种情况只能返回 加密后的变量x, 如果我们想要 函数里边的x 修改或者监控 ,怎么办呢?找到dll , 修改这个dll的功能。导入表结构IAT表程序加载前程序加载后(IAT表会断裂 成真正的函数地址)不要管 ring0 和 ring 3 ,IAT hook 都这

2020-05-15 20:53:24 290

原创 CSDN 保存文章为PDF

(function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announce, #ad_cen, #ad_bot").remove();$(".nav_top_2011, #header, #navigator").remove();$(".p4course_target, .comment-box, .recommend-box, #csdn-toolbar, #to

2020-05-14 18:06:37 114

原创 win32 - 子窗口控件 微软的轮子

windows 制的轮子.// 第一个窗口.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "stdio.h"#include "第一个窗口.h"HINSTANCE ghInstance;#define IDC_EDIT_TEXT 0x100#define IDC_BOTTON_SEND 0x101#define IDC_BOTTON_DECODE 0x102LRESULT CALLBACK WindowProc( //窗口处理函数 H

2020-05-13 12:39:29 127

原创 win32 - 消息类型

Windows消息的结构体:MSG//The MSG structure contains message information from a thread's message queuetypedef struct tagMSG { // msg HWND hwnd; //窗口句柄, 窗口对象的标识 UINT message; //消息类型 每一个值对应不同的消息类型(点击、 键入) WPARAM wParam; //消息参数 LPA

2020-05-13 12:35:22 411

原创 win32 - 消息队列中间人

消息队列1.什么是消息?​ 当我们点击鼠标的时候,或者当我们按下键盘的时候,操作系统要把这些动作记录下来,存储到一个结构体中,这个结构体就是消息。​ 我们自己画的窗口有什么问题? 问题太多了 懒得说2. 消息队列 :每一个线程 只有 一个消息队列(一个容器(七个链表)来存放:消息)消息队列:可能存放 鼠标点击事件 、按下键盘、其他进程通过API。这个消息是怎么存到我们的线程里边的呢?通过中间商(操作系统),也就是操作系统把这些消息存到了消息队列里边。也就意味着 我们鼠标点击,按下键盘,

2020-05-13 12:24:31 170

原创 win32 窗口的本质

学习WIN32的吃力?没理解 整个框架.看看一个图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BT8hiYG7-1589342852974)(窗口的本质.assets/1587912134933.png)]GUI 使用Windows现成的窗口(大部分是user32.dll), 如果你想自己画一个 自己的窗口 GDI(gdi32.dll).但是GUI 和 GDI 都是win32k.sys 画的。我们之前知道 句柄表 是一个进程 独有的 ,每个进程的句柄表值不.

2020-05-13 12:08:10 340

原创 Win32 临界区

1.线程安全的问题每一个线程 都有自己的堆栈,而局部变量是存储在栈中的,这就意味着每一个线程都有一份自己的"局部变量",如果线程仅仅使用"局部变量" 那么就不存在线程安全的问题.但是 如果线程使用全局变量呢?线程安全问题的必要条件:多线程访问全局变量多线程对全局变量有写的操作code 多线程对全局变量进行写操作会出现的错误#include "stdafx.h"#include <windows.h>DWORD dwTickys = 10;DWORD WINAPI Th

2020-05-13 12:04:58 338 1

原创 win32 - 互斥体 - 防止程序多开

1. 内核级别的临界资源怎么办?上面的情况是针对 同一个进程 的多个线程访问 临界资源的线程安全问题.那么多个进程(跨进程也就意味着不同线程) 访问 临界资源那不简单么? 还是用临界区的线程锁不就行了?你个hape, 线程锁是针对一个进程里边的多个线程,所以可以在进程申请一个令牌, 实现多个线程问题.但是现在的问题是 多个进程 (跨进程)访问内核的临界资源.你在你的进程A里边申请一个令牌, 进程B不能使用啊.你在你的进程B申请的令牌,进程A不能使用啊.于是 , 我们把令牌 放到了.

2020-05-13 12:02:22 969

原创 Win32 -事件 event(线程同步)

事件 —event1.通知类型HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, //SD BOOL bManualReset, //TRUE 手工重置信号 / FALSE system自动重置信号 BOOL bInitialState, //初始状态 LPCTSTR lpName //object name 希望别的进程用)bManualReset是否需要手工重置信号If this

2020-05-13 11:55:48 1180

原创 Win32 - 线程控制

1.如何让线程停下来?Sleep() 自己停下来SuspendThread(Handle) //挂起别人的进程ResumeThread(Handle) //复活别人的进程#include "stdafx.h"#include <windows.h>DWORD WINAPI ThreadProc(LPVOID lpparameter){ for(int i = 50;i > 0 ;i--){ Sleep(500); printf("-----%d\n",i);

2020-05-13 00:21:30 127

原创 Win32 - 创建线程

1.什么是线程?线程是附属在进程上的执行实体,是代码的执行流程.一个进程可以包含多个线程,但一个进程至少要包含一个线程.进程是空间的概念,挂起进程,实际上是挂起线程.线程是时间的概念.线程有多少个,说明有多少个代码段在执行怎么理解多个代码段在执行?​ 并不一定是同时执行.单核状态下,是线程交叉执行的,感觉这个俩个线程同时执行(受限于CPU 和寄存器)多核的情况下,多个CPU同时进行跑线程2.创建线程HANDLE CreateThread( lpSECURITY_ATTBU

2020-05-13 00:20:19 262

原创 Win32 - 进程相关API

进程相关API1.PID 与 句柄上节课,我们知道.每一个进程 都有自己的 私有的一张 句柄表.​ 然而我们的操作系统(Windows)也有一张句柄表 , 叫做全局句柄表 这张表 包含了所有的进程 线程 事件 等接下来分析 我们创建子进程返回来的Process_Informationtypedef struct _PROCESS_INFORMATION { HANDLE hProcess; //本身进程的句柄表编号 HANDLE hThread; DWOR

2020-05-13 00:19:06 400

原创 Win32 - 句柄表

创建一个进程后,会返回一个结构体 OUT 出来的typedef struct _PROCESS_INFORMATION { HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId;} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;s父进程于是就有了子进程的进程句柄、线程句柄、进程ID、和线程ID。.

2020-05-13 00:13:59 200

原创 WIN32 - 进程

进程–操作系统的器官现在的操作系统都是多进程的操作系统1.什么是进程?​ 进程提供程序所需要的资源,如:数据、代码等等。​ 程序运行的状态和进程没有关系,可以看成是空间状态。​ 现实生活类比,进程相当于房子,房子里边有各种各样的资源(桌子、椅子、电脑)。线程相当于使用这些资源的人。1. 验证进程是一个空间的概念 ![1587614214080](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vc210bGcvUGljR28vcmF

2020-05-13 00:12:08 216

原创 滴水中级--物理页

物理页唯一存储物理的寄存器 CR3尝试挂一下物理页想法 --> 谁说0地址编号不能读写?思路:1. 在VC6.0 写一个变量,并查看这个变量的线性地址,通过101012转化找到物理地址2. 给0这个线性地址 挂上与上面这个变量相同物理地址#include "stdafx.h"#include <windows.h>int main(int argc, char* argv[]){ int x = 0x1234; printf("x: %x",&x); /

2020-05-13 00:02:01 541 1

原创 中级—Windbg symbol 问题

在Windbg敲命令!process出现如下错误:kd> !processNT symbols are incorrect, please fix symbols-----------------------------------------------------------------------解决方法:按如下步骤敲命令即可kd> .sympath SRVD:\WinDDK\Symbols_mshttp://msdl.microsoft.com/download/symbol

2020-05-12 23:58:18 846

空空如也

空空如也

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

TA关注的人

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