<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Non_function的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Non_function</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Non_function]]></copyright><item><title><![CDATA[温故知新：函数指针]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/129794837</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/129794837</guid><author>Non_function</author><pubDate>Mon, 27 Mar 2023 14:56:45 +0800</pubDate><description><![CDATA[那这里可以看出来了，当你让函数指针指向一个函数，他所指向的实际上不是你那个函数的地址，而是一个类似函数表的地方，当线程运行到此处时他通过二次跳转最终来到函数地址。我一直以为只能直接调用函数指针，今天看代码发现一个对函数指针解引用的操作，一下子以为是我记错了，回头测试了一下结果发现两种写法都可以。另外一点，按理说pf指向func，但是在监视窗口内pf的值和func的值却不一样。啊，我确实是有点笨拙了。可以看出来，至少在汇编层面上，直接调用函数指针 和 解引用使用函数指针确实是没有区别的。]]></description><category></category></item><item><title><![CDATA[功能错误 or 设计错误？远控项目里我这样看]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/129551639</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/129551639</guid><author>Non_function</author><pubDate>Wed, 15 Mar 2023 13:20:49 +0800</pubDate><description><![CDATA[从开发中遇到的功能漏洞谈设计规范]]></description><category></category></item><item><title><![CDATA[MFC窗口创建类提示“没有注册类”]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/125348490</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/125348490</guid><author>Non_function</author><pubDate>Sat, 18 Jun 2022 16:23:24 +0800</pubDate><description><![CDATA[MFC窗口创建类提示“没有注册类”]]></description><category></category></item><item><title><![CDATA[使用C++代码调用目标程序函数心得]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/123430473</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/123430473</guid><author>Non_function</author><pubDate>Fri, 11 Mar 2022 18:15:07 +0800</pubDate><description><![CDATA[本文所提到的所有观点均来自个人理解体会，技术指导：易道云tiger

使用C++语言调用游戏函数，关键点就两个，一个是要把他函数仿照出来，一个是找一个位置调用。

其实到这里我也知道之前在疑问笔记里提出的“为什么分析一个函数要‘参数’，‘返回值’，‘调用约定’三大件”问题的答案了，因为我们想要把这个函数模仿出来，就必然的需要这些内容。

    以下面地址6DA8B3这个函数为例：他的三大件就是参数：“dword”，返回值：“某结构体或类指针”返回值，调用约定：“thiscall”。

当然返回值是...]]></description><category></category></item><item><title><![CDATA[钩子注入原理讲解（SetWindowsHook注入）]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/122378638</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/122378638</guid><author>Non_function</author><pubDate>Sat, 08 Jan 2022 13:24:20 +0800</pubDate><description><![CDATA[我们想要用自己写的一个函数来接管A程序对某消息的处理，那么首先你这个函数所在的文件，是要在这个A程序里面的，也就是说，SetWindowsHookEx函数，在他下钩子的过程当中，操作系统帮助我们完成了一次注入。



HHOOK SetWindowsHookExA(

intidHook, //钩子程序的类型，常用的有WH_KEYBOARD用于钩取键盘消息

HOOKPROC   lpfn,//回调函数，就是...]]></description><category></category></item><item><title><![CDATA[命令行参数传递]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/121964218</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/121964218</guid><author>Non_function</author><pubDate>Wed, 15 Dec 2021 23:44:48 +0800</pubDate><description><![CDATA[传递命令行参数的操作合集]]></description><category></category></item><item><title><![CDATA[获取程序入口点]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/121942806</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/121942806</guid><author>Non_function</author><pubDate>Wed, 15 Dec 2021 00:39:04 +0800</pubDate><description><![CDATA[入口点介绍：

一个程序从最开头往下算大致可以分为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 ]]></description><category></category></item><item><title><![CDATA[无辅助空间交换值的三种方式【所有语言通用】]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/121452249</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/121452249</guid><author>Non_function</author><pubDate>Sun, 21 Nov 2021 13:52:26 +0800</pubDate><description><![CDATA[两个变量，如何在没有辅助空间的情况下交换值？

这里分享三个交换方式：

1. 左右移操作【位运算】

    一个unsigned型数据占4字节，32位，在给出的两个数字并没有超过65535的情况下可以使用如下代码实现交换：


unsigned numA{0x100};
unsigned numB{0x200};
numA &lt;&lt;= 16；
numA |= numB;
numB = numA;
numA &amp;= 0x0000ffff;
numB &gt;&gt; 16;

 ...]]></description><category></category></item><item><title><![CDATA[详解MFC运行时类信息机制]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/120293268</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/120293268</guid><author>Non_function</author><pubDate>Tue, 14 Sep 2021 19:23:36 +0800</pubDate><description><![CDATA[作用

在程序运行过程中可以获知对象的类的相关信息（例如对象是否属于某个类）



使用条件

类派生自Cobject
	类内添加声明宏 DECLARE_DYNAMIC(theClass)
	类外添加实现宏 IMPLEMENT_DYNAMIC(theClass, baseClass)


使用方式

类对象名.IsKindOf(RUNTIME_CLASS(想要判断是否在其中的类名))



使用代码示例


class CMonster:public CObject
{
    DECLARE_DYNAMI]]></description><category></category></item><item><title><![CDATA[极简fseek()函数讲解，一分钟掌握]]></title><link>https://blog.youkuaiyun.com/Non_function/article/details/119722519</link><guid>https://blog.youkuaiyun.com/Non_function/article/details/119722519</guid><author>Non_function</author><pubDate>Sun, 15 Aug 2021 23:48:38 +0800</pubDate><description><![CDATA[fseek函数的作用为调节文件指针位置

应用场景：当我们通过文件指针通过fwrite()函数向文件中输入数据，假设数据为字符串“麻辣香锅”，输入完毕后文件指针的指向位置实际上是“锅”的后面，相当于光标。此刻如果使用fread函数是无法正常读取文件内容的，原因是fread只能读取指针往后的内容。需要将文件指针前置，这时候就需要用到fseek函数。

语法：



参数：

第一参数为文件指针

二三参数共同决定文件指针的位置

参数三相应的宏：

宏
			值
			备注
		SEEK_CUR
			1
	]]></description><category></category></item></channel></rss>