首页
社区
课程
招聘
[讨论]如果直接获取一块可执行空间?
发表于: 2006-2-16 15:27 3886

[讨论]如果直接获取一块可执行空间?

2006-2-16 15:27
3886
想把段可执行代码在某程序运行时写入其进程空间,而后用一个函数指针指向该代码并执行。例如:

typedef (* PFUNC)(int);
PFUNC p = (PFUNC)malloc(code_size);
/* 对p进行代码写入,此处略 */
p(123); /* 执行刚刚写入的代码 */

这里我想知道,如何使得malloc返回的内存指针是可执行的?别告诉我不可能做到,因为有人做到了,好像也没有利用缓冲区溢出的手段,这里向大家请教。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
VirtualAlloc不是蛮好?
2006-2-16 15:30
0
雪    币: 208
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
问题就是别人就用malloc得到了,这是怎么实现的?
2006-2-16 15:32
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
再VirtualProtect一下就完了
2006-2-16 15:35
0
雪    币: 208
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
没有发现VirtualProtect的调用
2006-2-16 15:42
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
为何一定要怀疑malloc呢?
#include <windows.h>
#include <stdio.h>

#pragma comment (linker, "/subsystem:windows")

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        DWORD a;
        a = (DWORD)malloc(100);

        memcpy((LPVOID)a,
"\xE8\x0C\x00\x00\x00\x75\x73\x65\x72\x33\x32\x2E\x64\x6C\x6C\x00\x00\xFF\x15\x78\x40\x40\x00\xE8\x0D\x00\x00\x00\x4D\x65\x73\x73\x61\x67\x65\x42\x6F\x78\x41\x00\x00\x50\xFF\x15\x74\x40\x40\x00\x6A\x00\xE8\x06\x00\x00\x00\x74\x65\x73\x74\x00\x00\xE8\x06\x00\x00\x00\x74\x65\x73\x74\x00\x00\x6A\x00\xFF\xD0\x6A\x00\xFF\x15\x14\x40\x40\x00",
    84);

        __asm jmp a
}
上传的附件:
2006-2-16 15:55
0
游客
登录 | 注册 方可回帖
返回
//