反汇编:函数指针
函数指针的定义:
返回类型 (调用约定 *变量名)(参数列表);
例如:
int (_cdecl *myfun)(int,int);
一般都用来调用非本身程序提供的函数来进行使用
代码如下:
#include<stdio.h> int main(){ int (_cdecl *myfun)(int,int); int i=10; myfun = (int (__cdecl *)(int,int))&i; myfun(1,2); return 0; }
反汇编如下:
5: int (_cdecl *myfun)(int,int); 6: 7: int i=10; 00401028 mov dword ptr [ebp-8],0Ah //将当前的i变量的地址赋值给ebp-8指向的地址中 8: 9: myfun = (int (__cdecl *)(int,int))&i; 0040102F lea eax,[ebp-8] //将当前定义好的函数指针的地址赋值给eax 00401032 mov dword ptr [ebp-4],eax // eax放到堆栈中 ebp-4的位置 10: 11: myfun(1,2); 00401035 mov esi,esp //将当前栈顶的地址赋值给esi 00401037 push 2 //压入堆栈 0x2 00401039 push 1 //压入堆栈 0x1 0040103B call dword ptr [ebp-4] // 将当前地址+指令长度的值压入堆栈,然后将函数指针指向地址中的值进行调用,EIP改变 0040103E add esp,8 00401041 cmp esi,esp 00401043 call __chkesp (00401070) 12: 13: return 0; 00401048 xor eax,eax 14: }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY