- 博客(10)
- 收藏
- 关注
原创 温故知新:函数指针
那这里可以看出来了,当你让函数指针指向一个函数,他所指向的实际上不是你那个函数的地址,而是一个类似函数表的地方,当线程运行到此处时他通过二次跳转最终来到函数地址。我一直以为只能直接调用函数指针,今天看代码发现一个对函数指针解引用的操作,一下子以为是我记错了,回头测试了一下结果发现两种写法都可以。另外一点,按理说pf指向func,但是在监视窗口内pf的值和func的值却不一样。啊,我确实是有点笨拙了。可以看出来,至少在汇编层面上,直接调用函数指针 和 解引用使用函数指针确实是没有区别的。
2023-03-27 14:56:45
124
原创 使用C++代码调用目标程序函数心得
本文所提到的所有观点均来自个人理解体会,技术指导:易道云tiger使用C++语言调用游戏函数,关键点就两个,一个是要把他函数仿照出来,一个是找一个位置调用。其实到这里我也知道之前在疑问笔记里提出的“为什么分析一个函数要‘参数’,‘返回值’,‘调用约定’三大件”问题的答案了,因为我们想要把这个函数模仿出来,就必然的需要这些内容。 以下面地址6DA8B3这个函数为例:他的三大件就是参数:“dword”,返回值:“某结构体或类指针”返回值,调用约定:“thiscall”。当然返回值是...
2022-03-11 18:15:07
1027
1
原创 钩子注入原理讲解(SetWindowsHook注入)
我们想要用自己写的一个函数来接管A程序对某消息的处理,那么首先你这个函数所在的文件,是要在这个A程序里面的,也就是说,SetWindowsHookEx函数,在他下钩子的过程当中,操作系统帮助我们完成了一次注入。HHOOK SetWindowsHookExA(intidHook, //钩子程序的类型,常用的有WH_KEYBOARD用于钩取键盘消息HOOKPROC lpfn,//回调函数,就是...
2022-01-08 13:24:20
3326
原创 获取程序入口点
入口点介绍:一个程序从最开头往下算大致可以分为DOS头,DOS头相关数据,PE头,然后才是文件数据,我们要找的入口点地址写在了PE头里面。DOS头的长度是固定的,但其相关数据是不固定的,好在DOS头里有一个LONG类型的e_lfanew,这个变量记载了PE头相对DOS头的偏移。IMAGE_NT_HEADERS是PE头结构体的宏,在32位和64位下分别对应_IMAGE_NT_HEADERS和_IMAGE_NT_HEADERS64。typedef struct _IMAGE_NT_HEADERS
2021-12-15 00:39:04
886
1
原创 无辅助空间交换值的三种方式【所有语言通用】
两个变量,如何在没有辅助空间的情况下交换值?这里分享三个交换方式:1. 左右移操作【位运算】 一个unsigned型数据占4字节,32位,在给出的两个数字并没有超过65535的情况下可以使用如下代码实现交换:unsigned numA{0x100};unsigned numB{0x200};numA <<= 16;numA |= numB;numB = numA;numA &= 0x0000ffff;numB >> 16; ...
2021-11-21 13:52:26
494
原创 详解MFC运行时类信息机制
作用在程序运行过程中可以获知对象的类的相关信息(例如对象是否属于某个类)使用条件类派生自Cobject 类内添加声明宏 DECLARE_DYNAMIC(theClass) 类外添加实现宏 IMPLEMENT_DYNAMIC(theClass, baseClass)使用方式类对象名.IsKindOf(RUNTIME_CLASS(想要判断是否在其中的类名))使用代码示例class CMonster:public CObject{ DECLARE_DYNAMI
2021-09-14 19:23:36
335
1
原创 极简fseek()函数讲解,一分钟掌握
fseek函数的作用为调节文件指针位置应用场景:当我们通过文件指针通过fwrite()函数向文件中输入数据,假设数据为字符串“麻辣香锅”,输入完毕后文件指针的指向位置实际上是“锅”的后面,相当于光标。此刻如果使用fread函数是无法正常读取文件内容的,原因是fread只能读取指针往后的内容。需要将文件指针前置,这时候就需要用到fseek函数。语法:参数:第一参数为文件指针二三参数共同决定文件指针的位置参数三相应的宏:宏 值 备注 SEEK_CUR 1
2021-08-15 23:48:38
12351
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人