1 第一个图形界面程序 步骤1:创建Windows应用程序 选择空项目 步骤2:在新建项窗口中选C++代码文件 创建一个新的cpp文件 步骤3:在新的cpp文件中添加:#include <Windows.h> 并添加入口函数: int CALLBACK WinMain( CALLBACK 是一个宏 _In_ HINSTANCE hInstance, #define CALLBACK __stdcall _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmd…
1 内核对象 前面已经学过线程和互斥体两个内核对象.此节讲了事件这个内核对象.前面提出了内核对象这个概念,可能不太清晰,简单来说内核对象就是系统层的东西. 1.1 小结内核对象: 进程.线程.事件.互斥体.文件.文件映射等. 1.2 事件内核对象的创建 HANDLE g_hEvent = CreateEvent(NULL, TRUE, FALSE, "XYZ"); HANDLE g_hMutex = CreateMutex(NULL,FALSE, "XYZ"); 1…
联合体 特点 1.联合体的成员是共享内存空间的 2.联合体的内存空间大小是联合体成员中对内存空间大小要求最大的空间大小 3.联合体最多只有一个成员有效 节表数据结构说明 PE 加载 过程 FileBuffer-ImageBuffer 文件偏移.内存偏移的计算 待补充…
向代码节添加代码实现 作者经过一周不断的失败,再思考以及无数次调试终于实现. 思路:八个步骤 1. 文件拷到文件缓冲区(FileBuffer) //图示见(零基础逆向工程18之PE加载过程) 2. 文件缓冲区扩展到内存映像缓冲区(ImageBuffer) 3. 判断代码空闲区是否有足够空间存储ShellCode代码 4. 将代码复制到空闲区 5. 修正E8 6. 修正E9 7. 修改OEP 8. 内存映像缓冲区到新文件缓冲区(NewBuffer) 9. 新文件缓冲区到文件 向其他节(如数据段)空…
原文地址:https://www.cnblogs.com/wangjunwei/p/11392825.html 第1节零基础快速入门SpringBoot2.0 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1.SpringBoot2.x课程介绍和高手系列知识点 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_2.SpringBoot2.x依赖环境和版本新特性说明 小D课堂 - 零…
第1节零基础快速入门SpringBoot2.0 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1.SpringBoot2.x课程介绍和高手系列知识点 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_2.SpringBoot2.x依赖环境和版本新特性说明 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3.快速创建Sprin…
1 资源文件,创建对话框 详细步骤: 1.创建一个空的Win32应用程序 2.在VC6中新增资源 File -> New -> Resource Script 创建成功后会新增2个文件:xxx.rc 和 resource.h 3.打开新创建的xxx.rc文件,在资源窗口新增一个对话框,并在对话框上新增2个按钮. 4.打开resource.h文件,观察变化: #define IDD_DIALOG_MAIN 101 #define IDC_BUTTON_OK 1000 #define IDC_BU…
1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍和高手系列知识点     简介:介绍SpringBoot2.x课程大纲章节         java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Springboot2…
1 进程的创建过程 打开系统 --> 双击要运行的程序 --> EXE开始执行 步骤一: 当系统启动后,创建一个进程:Explorer.exe(也就是桌面进程) 步骤二: 当用户双击某一个EXE时,Explorer 进程使用CreateProcess函数创建被双击的EXE,也就是说,我们在桌面上双 击创建的进程都是Explorer进程的子进程. CreateProcess BOOL CreateProcess( LPCTSTR lpApplicationName, // name of exe…
1 Win32应用程序入口识别 思路:根据WinMain的四个参数,由调用顺序,知道最后压栈的是hInstance句柄(也就是WinMain函数的第一个参数,其值等于ImageBase),根据反汇编,则判断压栈参数是GetModuleHandle函数的返回值,即可找到Win32应用入口. 004011AC |> \50 push eax 004011AD |. FF75 9C push [local.25] 004011B0 |. 56 push esi 004011B1 |. 56 push…
1 信号量 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.[百度百科] 1.1 创建信号量 HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); 函数说明: 第一个参数表示安全控制,一般直接传入NULL. 第二个参数表…
在程序中使用图标 1.加载图标 HICON hIcon; hIcon = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON)); hAppInstance 应用程序句柄 IDI_ICON 图标编号 MAKEINTRESOURCE 用这个宏的主要原因是有的资源是用序号定义的,而不是字符串.所以要把数字转换成字符串指针 2.设置图标 case WM_INITDIALOG : hIcon = LoadIcon (hAppInstance, MAKEIN…
1 查找窗口 1.1 代码案例 //查找指定窗口 TCHAR szTitle[MAX_PATH] = {0}; HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书 IP Messenger")); if(hwnd != NULL) { //修改窗口标题 ::SetWindowText(hwnd,"新的窗口标题"); } else { ::MessageBox(NULL,TEXT("窗口没…
1 引言 讲了第二个内核对象,互斥体.前面已经学过一个内核对象,线程.这节讲两个函数,WaitForSingleObject()和WaitForMultipleObjects().因此这两个函数是根据内核对象的状态来进行操作的. 临界区:一个进程里面对线程进行互斥的控制. 互斥体:实现跨进程的互斥的控制.多个进程抢同一个全局变量,怎样保证最终只有一个进程来用. 2 ForSingleObject() DWORD WaitForSingleObject( HANDLE hHandle, // ha…
1 类的成员权限 1.1 小结: 1.对外提供的函数或者变量,发布成public的 但不能随意改动. 2.可能会变动的函数或者变量,定义成private的 这样编译器会在使用的时候做检测. 3.只有结构体内部的函数才可以访问private的成员. 4.public/private可以修饰函数也可以修饰变量. 5.将定义与实现分离,代码会有更好的可读性. 1.2 一些问题 1.private真的不能访问吗 答:可以,可以用指针来访问. 2.private是否被继承 答:父类中的私有成员是会被继承的…
1 类内的成员函数和普通函数的对比 1.1 主要是从参数传递.压栈顺序.堆栈平衡来总结. 1.参数传递:成员函数多传一个this指针 2.压栈顺序:成员函数会将this指针压栈,在函数调用取出 3.堆栈平衡:普通函数是外平栈 对比图如下: 1.2 一段C++代码的分析 这段代码单步会到哪里异常?为什么? struct Person { int x ; void Fn_1() { printf("Person:Fn_1()\n"); } void Fn_2() { x = 10; pri…
数据目录 1.我们所了解的PE分为头和节,在每个节中,都包含了我们写的一些代码和数据,但还有一些非常重要 的信息是编译器替我们加到PE文件中的,这些信息可能存在在任何可以利用的地方. 2.这些信息之所以重要,是因为这些信息包含了诸如: PE程序的图标在哪里? 用到了哪些系统提供的函数? 为其他的程序提供哪些函数? 3.编译器添加了这么多信息,那程序是如何找到这些信息的呢? 答案就是:数据目录 4.数据目录定位: 可选PE头最后一个成员,就是数据目录.一共有16个: typedef struct…
PE文件的两种状态 1.在硬盘中 节省硬盘空间 硬盘对齐 内存对齐 2.在内存中 3.PE磁盘文件与内存映像结构图 PE文件为什么要分节 -- 手动解析:PE文件 分析软件:飞鸽传书http://www.gpxz.com/soft/jiaoxue/wendang/219212.html 1. DOS头: struct _IMAGE_DOS_HEADER { 0x00 WORD e_magic; //5A4D 0x02 WORD e_cblp; //0090 0x04 WORD e_cp; //0…
#define 无参数的宏定义的一般形式为:#define 标识符 字符序列 如:#define TRUE 1 注意事项: 1.之作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到预处理之后的编译阶段才能发现 带参数宏定义:#define 标识符(参数表)字符序列 如:#define MAX(A, B) ((A) > (B)?(A):(B)) 代码 x = MAX(p, q)将被替换成 y = (p) > (q)? (p):(q) 注意: 1.宏名标识符与左圆括号之间不允许…
笔记 3.SpringBoot2.x整合redis实战讲解 简介:使用springboot-starter整合reids实战 1.官网:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-redis             集群文档:https://docs.spring.io/spring-data/data-redis/docs/current/ref…
1.SpringBoot2.xHTTP请求配置讲解 简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧 1.@RestController and @RequestMapping是springMVC的注解,不是springboot特有的         2.@RestController = @Controller+@ResponseBody         3.@SpringBootApplication = @Configuration+@EnableAutoConfig…
学习笔记 热部署 每次修改了代码都需要关闭应用重启 热部署就是有一个插件会监听我们应用的代码文件是否有变化,如果有变化就会有其他的类加载器加载 主要的依赖 复制到我们的pom.xml里面 安装完成jar包启动应用就可以了 修改代码增加一段代码输出,此时服务本身就是启动的.保存代码后,会自动启动程序,只加载变化的文件. 再加一段代码,.程序自动热加载 再次访问 不被热部署的文件 spring 默认不会监听静态资源文件. 如果想去监听静态资源文件的话,也可以去操作 不监听某个文件 applicati…
笔记 1.@SpringBootTest单元测试实战     简介:讲解SpringBoot的单元测试         1.引入相关依赖              <!--springboot程序测试依赖,如果是自动创建项目默认添加-->                 <dependency>                     <groupId>org.springframework.boot</groupId>                   …
笔记 1.SpringBoot启动方式讲解和部署war项目到tomcat9 简介:SpringBoot常见启动方式讲解和部署war项目Tomcat 1.ide启动     2.jar包方式启动                 maven插件:                 <build>                 <plugins>                     <plugin>                         <groupId&…
笔记 1.深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识)     简介:讲解SpringBoot里面Filter讲解和使用Servlet3.0配置自定义Filter实战                  filter简单理解:人--->检票员(filter)---> 景点 1.SpringBoot启动默认加载的Filter              characterEncodingFilter             hidd…
笔记 1.SpringBoot Starter讲解     简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-starter          2.starter主要简化依赖用的         spring-boot-starter-web    ->里面包含多种依赖 3.几个常用…
笔记 1.SpringBoot2.x持久化数据方式介绍          简介:介绍近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库             开发流程麻烦             1.注册驱动/加载驱动                 Class.forName("com.mysql.jdbc.Driver")             2.建立连接                 Connection con = DriverManager.getCon…
笔记 1.分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具          1.redis官网 https://redis.io/download          2.新手入门redis在线测试工具:http://try.redis.io/ 开始 命令行操作界面…
笔记 2.源码编译安装Redis4.x     简介:使用源码安装Redis4.x和配置外网访问 1.快速安装  https://redis.io/download#installation             wget http://download.redis.io/releases/redis-4.0.9.tar.gz             tar xzf redis-4.0.9.tar.gz             cd redis-4.0.9             make 启…
笔记 4.Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download         2.封装redis工具类并操作 开始 主要讲开发中的技巧 Redis 桌面管理工具 RedisDesktopManager 2019.2 发布 https://www.oschina.net/news/108331/redis-desktop-manager-2019-2-rele…