
C++
搬砖带头大哥
这个作者很懒,什么都没留下…
展开
-
InlineHook
计算偏移 = 自己创建的函数的地址 - 要Hook的函数地址 - 5,第一个字节为0xE9,构成无条件跳转指令。将前面构造的无条件跳转写入Hook函数地址处,大小为5字节,并保存之前的数据,以便修复。构建自己函数的时候一定要加上调用约定,否则新函数会默认使用C语言的调用约定,这回。加载函数所在的模块,获取要Hook的函数地址。导致在函数返回过程中,因堆栈不平衡而报错。根据要hook函数的原型创建自己的函数。修改目标页属性,是其可读可写可执行。转载 2022-11-10 21:44:02 · 499 阅读 · 1 评论 -
C/C++ x64 Inline Hook 代码封装
接着来研究一下64位程序的Hook,64位与32位系统之间无论从寻址方式,还是语法规则都与x32架构有着本质的不同,所以上面的使用技巧只适用于32位程序,注入32位进程使用,下面的内容则是64位下手动完成Hook挂钩的一些操作手法,由于64位编译器无法直接内嵌汇编代码,导致我们只能调用C库函数来实现Hook的中转.简单实现64位Hook去弹窗: 由于64位编译器无法直接内嵌汇编代码,所以在我们需要Hook时只能将跳转机器码以二进制字节方式写死在程序里,如下代码是一段简单的演示案例,主要实现了去弹窗的功能.转载 2022-11-10 17:27:31 · 1230 阅读 · 0 评论 -
C语言 将十六进制字符串转为十六进制数 (二进制、十进制都适用)
参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用16进制做转换、遇到’0’前置字符而不是’0x’的时候会使用8进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(‘\0’)结束转换,并将结果返回。这里主要是两个参数:nptr(要转换的字符串)、base(代表采用的进制方式)转载 2022-10-27 00:53:30 · 1753 阅读 · 0 评论 -
windows api 文件读写
输入参数,共享模式。输入参数,读取数据的文件对象,由CreateFile创建,调用CreateFile打开文件时,需要指明GENERIC_READ读取操作模式或者GENERIC_WRITE写入操作模式。在读的过程中,文件指针会随着读操作的进行而自动移动,在循环调用本函数时,会顺序读出文件的内容,如果程序返回失败,可以使用GetLastError函数获取错误信息。输入参数,写入数据的文件对象,由CreateFile创建,调用CreateFile打开文件时,需要指明GENERIC_WRITE读取操作模式。转载 2022-09-22 00:58:10 · 2180 阅读 · 0 评论 -
VMProtect使用说明
VMProtect使用说明一. 接口说明二. 使用方法必须有相对应的VMProtectEnd结束。比如:保护的单元是函数,而不是整个EXE代码比如:保护嵌套情况字符串保护应使用VMProtectDecryptStringA或VMProtectDecryptStringW函数保护名为字符串,被保护后,明晚字符串不再出现在内存,除非被解密的那一刻!调用方法:.........原创 2022-06-17 00:54:41 · 4290 阅读 · 0 评论 -
MFC CHotKeyCtrl控件
知识点:CHotKeyCtrl控件获取热键数据注册热键响应热键事件一、CHotKeyCtrl控件void SetHotKey( WORD wVirtualKeyCode, WORD wModifiers );二、获取热键数据DWORD GetHotKey( ) const;void GetHotKey( WORD &wVirtualKeyCode, WORD &wModifiers ) const;三、注册系统热键RegisterHotKeyThe Registe转载 2022-05-30 02:14:52 · 251 阅读 · 0 评论 -
MFC--快捷键(组合键/热键)与按钮实现操作按钮的方法
首先插入一按钮,将其visible属性设为False,ID如设为:IDC_BTN_FASTKEY;然后双击它,进入代码编辑界面,编辑代码,实现所要的功能;最后如下操作添加加速键:1 插入一个新的Accelerator(加速键)到资源中,把加速键和对应的响应控件(这里是一个按钮,其ID为:IDC_BTN_FASTKEY)与您选择的组合键设好关联起来,如可以与Ctrl+Alt+空格关联起来;2 在按钮所在对话框的CPP文件所对应的头文件中public声明: HACCEL m_hAccel;virt转载 2022-05-28 00:00:56 · 1483 阅读 · 0 评论 -
ESP32: 使用ILI9341(parallel)液晶模组显示JPEG图像
ESP32採用双核心执行( core 0解码 ,core 1显示图像 )提升速度。使用ILI9341模组(parallel介面附SD卡插槽), 显示存在SD卡上的JPEG相片。程式会读取根目录下jpg档案(宽高必须为320*240,档名为数字10-14),显示2秒钟后换下一张,一直重複。零件表:ESP WROOM-32开发板 x1ILI9341TFT LCD 320x240液晶萤幕 x1线路图:选"ESP32 Wrover Module"安装ILI9341驱动及JPEG解码库。https:转载 2022-05-23 22:46:09 · 3621 阅读 · 0 评论 -
Arduino uno esp01s 硬串口通信
参考资料:esp 烧录固件 和 烧录程序esp 通信测试程序ili9341 tft显示屏使用零件:Arduino unoili9341 tftesp01susb 烧录器最初的想法是, 弄一个BTC 和 ETH 价格显示的小电视,找了找手上有的硬件就这几样,于是就开始了折腾。首先声明我是菜鸡一个, C++ 也就学了半桶水,硬件更是十分业余,我的方法也许你不一定能直接套用。一开始就有个很严重的问题, 就是 Arduino 插上 我这块屏幕就没有多余的接口,来给esp做软串口通信了, 所.原创 2022-05-20 06:02:02 · 4285 阅读 · 0 评论 -
C++ 调用 DmReg.dll 加载 大漠 笔记
VS2019 编译通过// 初始化COM(mta)CoInitializeEx(NULL, 0);// 声明 指针函数typedef BOOL (_stdcall *Dm_SetPath)(char *Path, BOOL Number);// 获取exe 根目录char Temp[MAX_PATH] = { 0 };GetModuleFileName(NULL, Temp, MAX_PATH);ExePath.Format("%s", Temp);ExePath = ExePath.原创 2022-04-10 22:01:13 · 2676 阅读 · 1 评论 -
对WM_NCHITTEST消息的了解+代码实例进行演示
这个消息比较实用也很关键,它代表非显示区域命中测试。这个消息优先于所有其他的显示区域和非显示区域鼠标消息。其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用。Windows应用程序通常把这个消息传送给DefWindowProc,然后Windows用WM_NCHITTEST消息产生与鼠标位置相关的所有其他鼠标消息。通俗的讲从消息产生消息。case WM_NCHITTEST:return (LRESULT)HTNOWHERE;以上代码能禁用窗口的所有显示区域和非显示区域鼠标消息,转载 2022-04-05 00:21:43 · 941 阅读 · 0 评论 -
MFC 拖动无边框窗体
内容转载自https://www.bilibili.com/video/BV1AT4y137gS?p=35hpp //定义全局变量BOOL m_bMoving;CPoint m_ptMouse;cppCMFCApplication11Dlg::CMFCApplication11Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplication11Dlg::IDD, pParent){ m_hIcon = AfxGet转载 2022-04-02 06:02:25 · 597 阅读 · 0 评论 -
MFC error C2143: 语法错误 : 缺少“;”(在“*”的前面)
MFC error C2143: 语法错误 : 缺少“;”(在“”的前面)error C2143: 语法错误 : 缺少“;”(在“”的前面)error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int//a.h #include "b.h" class A { .... private: B b; };//b.h #include "a.h" cl转载 2022-03-29 17:57:59 · 1974 阅读 · 1 评论 -
MFC 字符串按分隔符分割
CString m_str1="123,789,654,339";int count = m_str1.Replace(',', ' ');if(count<=0){printf("No data");return;}int* num = new int[count];int pos = m_str1.Find(' ');int i = 0;while(pos != -1){CString field = m_str1.Left(pos);num [i] = atoi(fie转载 2022-01-07 22:45:07 · 690 阅读 · 0 评论 -
VS 2019 编译 汇编 文件
1、右键 .asm 文件,点击“属性”。2、在项类型里选择“自定义生成工具”。3、点击应用,然后点击左边“自定义生成工具”里的“常规”。4、在“命令行”里输入ml64 /c %(fileName).asm在“输出”里输入%(fileName).obj;%(Outputs)5、点击“确定”,然后重新编译。值得注意的是, 仅 .asm 文件需要设置 .h 文件不用设置...转载 2021-12-28 22:59:18 · 1504 阅读 · 0 评论 -
c语言 字符串 强制转换
CString from charCString StrPath;USES_CONVERSION;char DllPath[MAX_PATH] = { 0 };strcpy(DllPath, T2A(StrPath));//strcpy(DllPath, W2A(StrPath));CString StrPath;USES_CONVERSION;char *DllPath = T2A(StrPath);//char *DllPath = W2A(StrPath);CString fr原创 2021-12-28 04:51:45 · 1766 阅读 · 0 评论 -
文件夹拷贝 不提示
SHFILEOPSTRUCT sfo;sfo.hwnd = NULL;sfo.wFunc = FO_COPY;sfo.pFrom = "c:\\My_Docs1\0";sfo.pTo = "c:\\My_Docs2\0";sfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;hr = SHFileOperation(&sfo);原创 2021-12-28 02:55:01 · 215 阅读 · 0 评论 -
MFC对话框提示“未定义的基类CDialogEx“
问题:MFC对话框提示"未定义的基类CDialogEx"解决:检查头文件afxdialogex.h另外注意:#include “stdafx.h” 一定要放在第一行转载 2021-12-27 00:59:42 · 1595 阅读 · 0 评论 -
C++嵌入DLL到资源运行释放的问题
以前写过一篇《C#嵌入dll到资源释放的问题》。虽然相对于C#,C++中嵌入DLL到程序资源中,然后再释放出来的应用场合并没有那么多,但是还是有必要了解下一般的过程。结合本人在实际工作中解决此类问题的实践思路,这里介绍下最基本的一种解决方案。1 嵌入DLL到资源有些程序运行的时候,需要调用外部的DLL,用户使用时可能会不小心丢失这些DLL,导致程序无法正常运行,因此可以考虑将这些DLL嵌入到资源中,程序启动时自动释放到可执行程序目录(或者其他环境变量目录)。这里以嵌入FFmpeg+SDL开发所需要的DL转载 2021-12-26 23:51:24 · 1506 阅读 · 0 评论 -
主线程调用过环境检查以及防止游戏崩溃
先给大家说两种情况,也许这些情况都是你遇见过的。案例一,逆向软件,调试游戏找到了某个CALL,我们编写DLL,把这个call写入到DLL中,然后把DLL注入到软件内部,对这个CALL进行调用,发生游戏直接崩溃报错的情况。又或则直接用代码注入器编写内联汇编直接注入代码导致崩溃。(有的时候代码注入器不会出问题,因为他是进程挂靠的方式 优于DLL中非主线程调用的方式)图片案例二,编写了具有单一功能或则是一系列功能的DLL,测试以后功能正确,代码无误,可是总是在长时间运行时出现莫名其妙的崩溃情况。其实这转载 2021-12-15 21:46:34 · 2611 阅读 · 0 评论 -
vs2019 mfc dll 使用的lua工程方案 笔记
按照网址一的方法,制作 然后编译的时候会出现错误,使用网址二的方法 可以决绝,并且成功编译。网址1:https://blog.youkuaiyun.com/m0_46135508/article/details/121240436网址2:https://blog.youkuaiyun.com/m0_46135508/article/details/121667750...原创 2021-12-02 00:00:12 · 486 阅读 · 0 评论 -
VS2010编译静态链接MFC的OCX遇到的问题:nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 LIBCMTD.lib(dllm
打开工程属性页,配置属性->链接器->输入,忽略特定默认库添加LIBCMTD.lib;nafxcwd.lib附加依赖项添加nafxcwd.lib;LIBCMTD.lib目的是调整依赖库链接顺序。其他类似的问题也可以这样解决。如何查看依赖库的链接顺序呢?同样在链接器->命令行,其他选项中添加/verbose:lib重新build,就可以看到了。...转载 2021-12-01 23:55:13 · 353 阅读 · 0 评论 -
BMP位图结构很详细的说明和示例
一、文件格式Bmp文件是非常常用的位图文件,无论是游戏还是其他都被广泛使用。针对bmp文件的处理也有一堆现成的api进行调用,然而文件内部究竟怎样,如何自己来解析这样的文件呢?为了消除无聊,我用了几天时间来研究了一下,同时作为学习笔记,进行记录。首先,整个bmp文件的内容可以分为3到4块。之所以分为3到4块而不是固定的值,是因为,对于bmp来说可能存在调色板或者一些掩码。具体稍候讨论。第一块是bmp的文件头用于描述整个bmp文件的情况。结构如下:typedef struct tagBITMAPFI转载 2021-11-24 05:20:02 · 1221 阅读 · 0 评论 -
C++ MFC 调用 Lua
这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口、组件,随便你怎么叫),希望能用脚本来控制主程序的行为。这实际上也是一种把业务分离,用脚本控制的架构,可能有些人把这种脚本叫做业务引擎,工作流等。为什么选择lua?因为它是一个能和C/C++结合得很紧的脚本语言,而我们的程序是用VC++ 写的;另外一点是因为它的名气,连WOW都用lua来提供API让玩家修改其游戏行为,那我是找不到什么理由拒绝它了。Lua是什么?在转载 2021-11-10 01:25:38 · 870 阅读 · 0 评论 -
使用C/C++语言遍历lua的table表
在宿主语言中操作lua的表跟在lua语言中的操作实际上很相似。在lua中我们多数时候是调用 pairs/ipairs 来迭代,不会直接使用 next 函数。但在宿主语言中只有 next,所以有必要讲下 lua 中 next 的用法:置 local k, v = nil,即先用 nil 调用 next 开始迭代;调用 k,v = next(table, k);如果 k ~= nil,则代表 k 和 v 是一对有效值;否则转到结束;使用 k, v;回到第2步,用此时的 k 再次调用 k, v = n转载 2021-10-31 20:51:30 · 748 阅读 · 0 评论 -
调用大漠插件5.1423
DWORD dmaddr=(DWORD)GetModuleHandle(“dm.dll”);(DWORD)(dmaddr+0x1063D0)=1;原创 2021-10-18 17:39:24 · 975 阅读 · 0 评论 -
关于 VS 2019 GetProcAddress 127 错误
https://github.com/hfl15/windows_kernel_development首先感谢 https://www.cnblogs.com/fanling999/p/4592740.html写的HOOK文章,很详细原因是这样的 在练习写 HOOK 源码:发现别人的项目,在VS2019下生成可以调用而我照抄别人的源码一字不漏,也不能调用。依然Getlasterror 127,代码敲一小时,就为这调用弄了两小时。感叹 C++ 水真深,所以写下来记录下。百度了很多文章,千篇一律原创 2021-10-17 08:05:04 · 866 阅读 · 0 评论 -
SendMessage
SendMessage(hwnd, WM_LBUTTONDOWN,0, MAKELPARAM(x,y));SendMessage(hwnd, WM_LBUTTONUP, 0,MAKELPARAM(x,y));原创 2021-10-14 16:31:35 · 280 阅读 · 0 评论 -
C/C++ 扫描特定进程内存状态
C/C++ 扫描特定进程内存状态扫描内存分页情况:#include <iostream>#include <windows.h>VOID ScanMemory(HANDLE hProc){ SIZE_T stSize = 0; PBYTE pAddress = (PBYTE)0; SYSTEM_INFO sysinfo; MEMORY_BASIC_INFORMATION mbi = { 0 }; //获取页的大小 ZeroMemory(&sysinf转载 2021-09-03 12:29:55 · 1040 阅读 · 1 评论 -
c++ 怎样用一个函数返回两个参数?
写一个简单的吧,不用结构体的。#include "iostream.h"void calcu(int *a,int *b,int *l,int *angle){//进行相应的操作//比如...*l += *a;*angle += *b;//不需要return,l、angle的值已经改变了,因为传递函数参数是指针类型}void main(){int a1=1,a2=2,a3=3,b1=4,b2=5,b3=6;int l=2,angle=2;calcu(&a1,&b1转载 2021-08-10 23:38:07 · 1782 阅读 · 0 评论 -
获取指定进程的加载基址
背景之前,自己写过一个进程内存分析的小程序,其中,就有一个功能是获取进程在内存中的加载基址。由于现在Windows系统引入了ASLR (Address Space Layout Randomization)机制,加载程序时候不再使用固定的基址加载。VS默认是开启基址随机化的,我们也可以设置它使用固定加载基址。至于什么是ASLR?或者ASLR有什么作用?本文就不深入探讨了,感兴趣的,可以自己私下了解了解。本文就是开发这样的一个小程序,使用两种方法来获取获取指定进程的加载基址...转载 2021-07-13 20:04:21 · 4785 阅读 · 1 评论 -
NTSTATUS类型返回值及含义
NTSTATUS类型返回值及含义0, “STATUS_WAIT_0”1, “STATUS_WAIT_1”2, “STATUS_WAIT_2”3, “STATUS_WAIT_3”63, “STATUS_WAIT_63”128, “STATUS_ABANDONED_WAIT_0”191, “STATUS_ABANDONED_WAIT_63”192, “STATUS_USER_APC”256, “STATUS_KERNEL_APC”257, “STATU原创 2021-07-09 16:27:09 · 3611 阅读 · 0 评论 -
VS2019 字符串对指针char*赋值编译器报错原因及解决方法
VS2019 字符串对指针char*赋值编译器报错原因及解决方法前几天在敲代码时,将字符串“Hellow world!”赋值给指针char*类型指针时编译器报错的问题网上搜索后发现char*是历史遗留问题,如果程序修改了字符变量变量会有可能导致程序的崩溃,2019版本的VS对此进行了严格控制,编译器会报错(C2440)编译器错误C2440微软Visual Studio 2019官方文档如下图:关于编译器错误C2440微软官方给出更多详细详细的解释点下方链接:https://docs.mic转载 2021-07-02 01:31:39 · 6725 阅读 · 1 评论