98函数指针

我们都知道,函数在内存中,本质就是一段汇编代码.
调用的时候,使用call代码,执行完成之后,返回.

所谓的函数指针,其实存放着就是(函数)这段汇编代码的内存地址.


返回类型 (调用约定 *
指针名)(参数列表);

可能有人的听说过(游戏外挂).
比如一个游戏外挂里面有一个函数.

run(方向,步数)

当我们写好一个程序,利用技术手段,把我们的程序注入到游戏的内存里面.
并且找到游戏里run函数的内存地址,利用函数指针,就可以自己调用了.

当然,现在不理解的话,以后我们再给大家实战演习.



只要记住一点,我们自己源代码写好的函数,很方便就能调用.
但是其他程序的函数,我们没有源代码,想要调用的话,有函数指针就可以很方便的调用其他人已经编译生成的程序函数功能了.

函数指针的本质:按照你指定的参数和返回值以及调用约定,来call一个内存地址.

原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/9142314.html

时间: 2024-11-07 13:22:37

98函数指针的相关文章

蓝欧--lessonc12[函数指针]

#import <Foundation/Foundation.h> //int(*)(int ,int) 原类型//PFUN 新类型typedef int(*PFUN)(int ,int); typedef struct student{    char name[20];    char sex;    int age;    float score;}STUDENT; BOOL sortByAge(STUDENT stu, STUDENT stu1);BOOL sortByAge(STUD

C/C++ 类成员函数指针 类成员数据指针

普通函数指针:  "return_type (*ptr_name)(para_types) " 类成员函数指针: "return_type (class_name::*ptr_name)(para_types)" 类数据成员指针: "type class_name::* ptr_name"; C/C++: 1 class Demo 2 { 3 public: 4 Demo():data(100) 5 { 6 7 } 8 int data; 9 i

VB6/VBA中跟踪鼠标移出窗体控件事件(类模块成员函数指针CHooker类应用)

前几天发了一篇博文,是关于获取VB类模块成员函数指针的内容(http://www.cnblogs.com/alexywt/p/5880993.html):今天我就发一下我的应用实例. VB中默认是没有鼠标移出事件响应的,而这个事件其实在项目开发中,实用性很强,很多时候需要在鼠标移出窗体或控件时做些事情:没有这个事件会感觉很费力: 今天我所说的实际案例就是,在窗体上,设计一个SplitterBar控件,窗体的最终用户使用这个控件可以在运行程序时任意调整其内部控件大小. 我在第二篇参考博文作者开发的

C++ 在容器中存放函数指针

注意,对一般c++ 98标准编译器而言,容器泛型模板是不支持直接存放函数指针的.需要typedef将函数指针重命名. 比如,一个void返回值参数也为void的函数指针,需要 typedef void(*test)(void); 这样,test就可以当做函数指针模板类型添加到容器当中了. map<int, test> testMap; pair<int,test> p1 = make_pair(1,displayone); 以下示例代码简单的示范一下: #include<io

iOS开发之c语言基础Lesson-11 函数指针 上课笔记 与 试题练习

main.m 文件 9 #import <Foundation/Foundation.h> 10 #import "Pointer.h" 11 ////////////////Lesson 11 函数指针 课堂笔记 与 习题练习//////////// 12 13 14 //函数指针:指向函数的指针叫做函数指针,用来存储函数的地址 15 //函数名代表函数的入口地址 16 17 18 //回调函数; 函数指针变量,存储对应的函数的地址 19 //给函数指针类型,取一个新的名

单继承与多继承中的虚函数表和虚函数指针

首先,我们了解一下何为单继承,何为多继承?? 单继承:一个子类只有一个直接父类. 多继承:一个子类有两个或多个直接父类. 单继承中的虚函数表分析: 示例程序: #include <iostream> using namespace std; typedef void(*FUNC)(); class Base { public: virtual void func1() { cout << "Base::func1()" << endl; } virt

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

恼人的函数指针(一)

原文链接:http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html 这篇是为了加深记忆所写.发现,很多知识若不经过反复的琢磨和动手实践,是很难记得住的. 1)  函数指针的初始化. 函数如下: int CompareString(const string& str1, const string& str2) { return str1.compare(str2); } 函数的初始化有两种方式: 第一种,也是最普遍的方式:

C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程中执行.最终目标是,继承的业务逻辑类外部调用时有两个接口可选,调用syncRun同步执行:调用由引擎自动生成的asyncRun就异步执行.最终自动生成asyncRun的模板基类没能实现,主要原因是mingw对this处理的太有问题了!!原本以为编译器问题,后来才知道成员函数指针和this指针如此特殊