自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 理解windows DPI 以及开发过程中的迷惑问题

一、DPI定义DPI全称是dots per inch, 也就是每英寸的点数,在显示器上就是每英寸的像素个数,Window上一般默认是96 dpi 作为100% 的缩放比率, 但是要注意的是该值未必是真正的显示器物理值, 只是Windows里我们的一个参考标准。二、为什么设置DPI会使我们看到的程序变大简单来说我们可以直接理解为系统的机制,我们暂时不讨论程序对DPI的适配,只讨论系统在设置125%以后程序会放大的原理,如果打个比方的话就像系统使用一个放大镜一样让我们的程序看起来变大了,但是实际上.

2021-02-03 16:33:10 3726 2

原创 C++基础知识点

C++基础知识点@(技术笔记)文章目录C++基础知识点一、 C++基础1 const关键字1.1 概念1.2 修饰位置1.3 常量存储区1.3 常量折叠2 static关键字2.1 定义与功能2.2 修饰位置3 extern关键字3.1 作用3.2 使用场景4 inline内联函数4.1 函数调用过程4.2 内联函数定义4.3 声明内联函数4.4 内联函数与宏定义区别5 指针5.1 指针跟引用的区别5.2 指针参数传递和引用参数传递5.2 this指针5.3 野指针指针与悬空指针5.4 函数指针5.5

2022-04-15 21:53:24 3485

原创 C++面试常见问题

C++面试常见问题针对《程序员面试笔记——C/C++、算法、数据结构篇》一书的读书记录整理文章目录C++面试常见问题1.C++程序设计基础简述#include<>与#include""区别‘#’与‘##’在define中作用简述assert断言的概念简述++i与i++的区别简述C++类型转换操作符静态全局变量的概念简述宏定义与内联函数的区别sizeof计算结构体时内存对齐问题简述malloc/free与new/delete的区别简述delete与delete[]的区别不使用临时变量交换两个数

2022-04-15 21:42:03 717

原创 基础算法框架思路

基础算法框架文章目录基础算法框架一、树1.1 树的遍历1.2 二叉树1.3 二叉搜索树(BST)Binary Search Tree1.4 完全二叉树、满二叉树二、链表2.1 链表的几个基本操作2.2 递归翻转链表三、回溯算法3.1 回溯代码框架3.2 常见回溯问题3.2.1 子集3.2.2 组合3.2.1 排列3.3 其他回溯问题3.3.1 八皇后3.3.2 解数独3.3.3 括号的生成四、搜索算法4.1 深度优先搜索(DFS)4.2 广度优先搜索(BFS)4.3 二分搜索4.3.1 寻找最左侧、最右侧

2022-04-15 21:35:48 501

原创 数据结构基础:树

树二叉树由一个根节点加上根节点的做字数和右子树互不相交。在二叉树中,每个节点最多有两个子节点,左子节点和右子节点。二叉树一般有几种特定的:满二叉树:所有叶子结点都在一层完全二叉树:所有叶子结点都在后两层,并且最后一层结点依次从左到右排列。二叉搜索树:满足条件父节点大于左子树所有结点,父节点大于右子树所有结点。AVL树:本身是二叉搜索树,并且满足条件每个节点的左右子树深度差不超过1红黑树:节点带着红色或黑色,黑色是根节点。非叶节点到达叶子节点路径所包含的黑色节点数相同。二叉树存储形式

2022-04-15 21:07:04 184

原创 游戏开发设计模式:命令模式

二、命令模式2.1 命令模式的总结与介绍将一个请求封装成一个对象,从而允许使用不同的请求、队列或日志将客户端参数化,同时支持请求操作的撤销与恢复。命令就是一个对象化(实例化)的方调用、面向对象化的回调。2.1.1 命令模式的结构Command: 抽象命令类MoveCommand: 具体命令类Invoker: 调用者Actor: 接收者Client:客户类2.1.1 命令模式的分析命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。让命令作为一个类,来进行调

2022-03-09 19:20:49 4353

原创 游戏开发设计模式:单例模式

一、单例模式文章目录一、单例模式1.1 单例模式总结介绍1.1.1什么是单例模式1.1.2单例模式分类1.1.3单例类特点1.1.4如何保证线程安全?1.2 单例模式的几种写法1.2.1普通懒汉式单例 ( 线程不安全 )1.2.2加锁的懒汉式单例 ( 线程安全 )1.2.3内部静态变量的懒汉单例(C++11 线程安全)1.2.4饿汉式单例 (本身就线程安全)1.3 单例模式的优缺点1.4 在游戏中的应用1.1 单例模式总结介绍1.1.1什么是单例模式单例模式指在整个系统生命周期里,保证一个类只能产生

2022-03-09 19:17:39 3931

原创 《Effective C++》复习笔记

《Effective C++》复习笔记习惯C++减少宏替换使用宏其替换的宏预处理期间就进行了字符串替换,被替换的宏不会被编译器看到,宏并没有进入符号表里。所以单纯常量使用enum或者const对象代替宏#define替换宏替换是简单的字符串替换,如果是形似函数的宏,在进行字符串替换之后,无法进入调试的。所以最好改用inline函数,可以调试,还有参数检查尽量使用const可以帮助编译器侦测出错误用法构造/析构/赋值对象初始化使用对象前要进行初始化,构造函数最好使用成员初值列,

2022-03-06 22:28:38 489

原创 C++11内存管理优化:智能指针

文章目录内存管理优化C++11之前的auto_ptrshared_ptr共享的智能指针使用方式注意问题unique_ptr独占的智能指针使用方式weak_ptr基本用法智能指针的使用选择内存管理优化C++11提供智能指针来帮助管理内存,智能指针可以自动删除分配的内存C++11提供三种智能指针:std::shared_ptr,std::unique_ptr,std::weak_ptr使用时需要引用头文件memoryC++11之前的auto_ptrC++11之前的auto_ptr设计上有很多坑,若通过

2022-03-06 19:03:04 794

原创 C++11的右值引用、移动语义、完美转发的简单理解总结

文章目录1 右值引用2.移动构造3.移动语义 std::move4.区分浅拷贝、深拷贝、移动语义5.完美转发 std::forward1 右值引用函数返回过程:函数内一个非static的临时变量的生命周期就是在函数调用结束的时候,这样就会出现一个矛盾,函数内如何返回一个出了函数体就会消失的对象,可以推理出来,函数返回对象时会进行一次拷贝,也就是说,上层的函数内拷贝了一份下层函数返回的对象,然后下层函数内的临时对象就会被析构,而上层拷贝出来的新对象继续使用。举个例子: class A

2022-03-05 22:04:43 314

原创 特别简洁的游戏A*B*寻路算法过程介绍

1.寻路算法文章目录1.寻路算法1.1 A*算法1.1.1相关定义1.1.2算法过程2.1 B*算法2.1.1 相关定义2.1.2 算法过程相关的博客介绍 A算法 、 B算法 、寻路预览1.1 A*算法1.1.1相关定义open list:记录下所有被考虑来寻找最短路径的方块,相当一个检测列表closed list:记录下不会再被考虑的方块,方块已经被记录是已经检测的结果G数值:开始点到当前方块的移动量((x当前 - x起点) + (y当前 - y起点))H数值:当前方块到终点的

2022-03-04 17:47:52 3892

原创 C++11如何优化代码写法

文章目录1 auto关键字使用方式2 decltype关键字decltype推导规则返回类型后置语法3 模板的别名4 列表初始化任意长度的初始化列表5 基于范围的for循环遍历6 std::function 和bind绑定器std::functionstd::bind绑定器lambda表达式lambda表达式相关用法1 auto关键字使用auto声明的变量必须马上初始化,以让编译器推断出他的实际类型,在编译时期将auto占位符替换为真的类型 auto x = 10; const auto *v =

2022-03-04 17:26:15 404

原创 STL相关知识整理

文章目录STL1 vector1.1 底层原理1.2 应用场景1.3 相关问题2 list2.1 底层原理2.2应用场景2.3 list与vector的区别3.1 底层原理3.2 应用场景4 map4.1.1 底层原理4.1.2 特点4.1.3 应用场景4.2 multimap4.3 hash_map 与 unordered_map4.3.2 map 与unordered_map使用选择4.4 hash_multimap 与 unordered_multimap4.5 总结5 set5.1.1 set与ma

2022-03-03 22:55:21 289

原创 VS快捷键 VA快捷键

VS常用快捷键快捷键功能说明F5启动调试有断点会到断点位置F9加断点当前光标位置F10逐语句调试不会进入一个函数F11逐过程调试到调用函数位置会进去Shift+F11调试位置退出当前函数到上一层调用的函数跟F11对应的,从进去的函数再出来Shift+F5退出调试Ctrl + "+“或”-"上一或者下一光标位置跳转到上一个光标所在位置,就是说可以跳转到上次修改的地方Ctrl + "<-“或”->”按照一

2022-03-03 22:48:36 378

原创 使用MinHook进行APIHook

文章目录一、Hook概述1.1 什么是Hook1.2 什么是APIHook1.3 Hook过程理解二、Hook分类2.0 分类概述2.1 Address Hook2.2 Inline Hook2.3 基于异常处理的Hook三、MinHook库介绍3.1 MinHook代码3.2 头文件定义中文说明:四、Hook实现过程一、Hook概述1.1 什么是Hook“Hook” 翻译过来的意思是“挂钩” “钩子”,在程序执行的时候,在适当的位置对程序运行流程进行监控、拦截即为Hook技术。1.2 什么是API

2021-01-21 17:59:55 3554

原创 window dpi获取相关一系列函数(超全)

WindowDPI超全的获取方式

2020-11-27 09:36:50 962

原创 C++几种for循环遍历容器方式

C++11几种for循环遍历容器方式1.原始遍历方式2.基于范围得for循环遍历方式3.借助的for_each算法遍历1.原始遍历方式 std::vector<int> arr; //... for(auto it = arr.begin(); it!=arr.end; ++it) { std::cout << *it << std::endl; }2.基于范围得for循环遍历方式只读方式遍历,如果希望修改数据,可以在n前加&符号,如果希望

2020-10-14 14:28:18 1406

原创 一些备份的常用Windows C++代码

1.标题通过进程名关闭进程#include <iostream>#include <Windows.h>#include <TlHelp32.h>#include <vector>BOOL TerminateProcessByName(const std::wstring &strProcName){ BOOL bExist = TRUE; PROCESSENTRY32W pe32 = { sizeof(PROCESSENTRY32W

2020-05-09 18:25:03 340

原创 Winsock2 服务提供者接口(SPI)

#Winsock2 服务提供者接口(SPI):##一、简述:1、一般用于提供给操作系统开发商、传输堆栈商在基础协议的基础上,开发更高级的服务.2、因为Winsock服务体系符合Windows开放服务体系.所以,它支持第三方服务提供者插入到其中.3、只要上层和下层的边缘支持Winsock2 SPI,即可向他们中间安装第三方提供者程序.4、普通开发者一般都是开发SPI的LSP(分层服务提供者),即第三方提供者,可用于监控Winsock API执行,HOOK Winsock API,甚至利用LSP技术注

2020-05-09 16:53:47 431

原创 Windows Ring3层注入——LSP劫持注入(SPI网络过滤器注入)(八)

Windows Ring3层注入——LSP劫持注入(SPI网络过滤器注入)(八)LSP劫持注入知识背景LSP劫持注入注入原理LSP劫持注入实现步骤LSP劫持注入相关代码LSP劫持注入知识背景LSP(Layered Service Provider ,分层服务提供者):LSP是一个安装在winsock目录中的DLL程序。应用程序通过winsock2进行网络通信时,会调用ws2_32.dl...

2020-01-16 17:05:43 3121

原创 Windows Ring3层注入——使用Windows挂钩注入(七)

Windows Ring3层注入——使用Windows挂钩注入(七)Windows挂钩注入原理Windows挂钩注入函数原型设置钩子API函数:取消设置钩子API获取模块句柄API:继续调用钩子链中的钩子过程:钩子回调Windows挂钩注入代码示例Windows挂钩注入优缺点优点缺点SetWindowsHookEx() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视...

2020-01-16 17:05:30 549 2

原创 Windows Ring3层注入——输入法注入(六)

Windows Ring3层注入——输入法注入(六)输入法介绍输入法注入原理输入法注入的相关知识输入法注入步骤输入法注入的函数原型及代码示例输入法注入操作描述流程图删除自己安装的输入法:输入法介绍输入法是一类特殊的程序,主要功能在程序中是进行文字的输入,一般有外挂式(早期的“万能五笔”)和输入法接口式两种实现方式。外挂式比较简单,它的形式通常是一个EXE文件,通过模拟一些Windows输入...

2020-01-16 17:05:03 1892

原创 Windows Ring3层注入——注册表注入(五)

Windows Ring3层注入——注册表注入(五)注册表注入原理注册表注入函数原型注册表注入步骤:注册表注入优缺点优点:缺点:注册表注入原理在Windows NT/2000/XP/2003操作系统中,当需要加载user32.dll的程序启动时,user32.dll会加载注册表键HLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\A...

2020-01-16 17:04:51 332

原创 Windows Ring3层注入——“QueueUserAPC” APC注入(四)

Windows Ring3层注入——“QueueUserAPC” APC注入(四)APC概念APC重点解释APC调用回调函数的条件APC注入函数原型及原理APC注入步骤APC注入代码示例APC注入优缺点优点:缺点:APC概念正常情况下,线程自己不主动调用ExitThread函数,或者一个进程内的其他线程不调用TerminateThread函数来终止线程的话,线程本身的行为是不会改变的。那如果...

2020-01-16 17:04:28 1130

原创 Windows Ring3层注入——CreateProcess劫持进程创建注入(三)

Windows Ring3层注入——CreateProcess劫持进程创建注入(三)CreateProcess劫持进程创建注入原理劫持进程创建注入好处CreateProcess劫持进程创建注入函数原型**CreateProcess**函数原型CreateProcess劫持进程创建注入步骤CreateProcess劫持进程代码示例CreateProcess劫持进程创建注入原理劫持进程创建注入:利...

2020-01-16 17:04:06 1271

原创 Windows Ring3层注入——远程线程注入(二)

Windows Ring3层注入——远程线程注入(二)远程线程注入原理远线程注入函数原型及步骤可使用远程线程注入原因:远程线程注入代码示例远程线程注入的优缺点优点:缺点:在Windows操作系统中,各个进程相对独立,一个进程不能轻易地控制其他进程中的线程。从根本上来说,远程线程注入技术要求目标进程中的一个线程调用LoadLibrary来载入我们想要的DLL。Windows提供了远线程机制,使我...

2020-01-16 17:03:53 739

原创 Windows Ring3层注入——修改PE输入表(导入表)注入(一)

Windows Ring3层注入——修改PE输入表(导入表)注入(一)PE文件简单介绍PE文件相关名词解释PE文件磁盘与内存映像结构图输入表介绍输入表结构输入表注入原理PE输入表注入的两种方法静态修改PE文件法:进程创建期修改PE输入表法:输入表注入核心代码示例PE文件简单介绍PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SY...

2020-01-16 17:03:27 1078

原创 Windows Ring3层注入——注入相关知识(零)

Windows Ring3层注入——注入相关知识(零)定义需要注入的几种情况注入时机静态输入动态加载加载服务模块注入方法概括说明注入方式原理通过干预输入表处理过程加载目标DLL改变程序运行流程主动加载DLL利用系统机制加载DLL几种常见的注入方式静态注入:动态加载:加载服务模块:定义注入就是迫使第三方进程非自愿加载某个模块(DLL)。需要注入的几种情况1.想要从另一个进程创建窗口派生子类窗...

2020-01-16 17:02:59 900

空空如也

空空如也

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

TA关注的人

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