读书人

将函数保存到文件解决思路

发布时间: 2012-06-13 12:30:18 作者: rapoo

将函数保存到文件
int Fun(int a)
{
return a+10;
}

// Fun函数的地址是0x401020
void main()
{
char a[1024];
ReadProcessMemory(GetCurrentProcess(),Fun,a,1024,0);
FILE *fs = fopen("C:\\D.exe","wb");
fwrite(a,1024,1,fs);
fclose(fs);
}

得到的二进制文件是一堆乱码。

我用反汇编工具查看了Fun函数的机器码是这样的:

00401050 55 push ebp
00401051 8B EC mov ebp,esp
00401053 81 EC 48 04 00 00 sub esp,448h
00401059 53 push ebx
0040105A 56 push esi
0040105B 57 push edi
0040105C 8D BD B8 FB FF FF lea edi,[ebp-448h]
00401062 B9 12 01 00 00 mov ecx,112h
00401067 B8 CC CC CC CC mov eax,0CCCCCCCCh
0040106C F3 AB rep stos dword ptr [edi]


而我修改了代码:

ReadProcessMemory(GetCurrentProcess(),(LPVOID)0x401020,a,1024,0);

这样就能得到正确的二进制文件了。
为什么Fun不能代替0x401020 ? 函数名不是可以代表函数地址的吗?

[解决办法]
我试了一下,得出的二进制文件是一样的。不知道你的问题是什么。还有fwrite(a,1024,1,fs);应该改为fwrite(a,1,1024,fs);

读书人网 >C++

热点推荐