首页
社区
课程
招聘
[讨论]C语言拷贝到另外一个程序中
发表于: 2011-1-8 16:13 4538

[讨论]C语言拷贝到另外一个程序中

2011-1-8 16:13
4538
目前我只会拷贝一个函数里面的代码到另外一个空间中
请问 有什么方法拷贝多个函数到另外一个空间中
并且他们之间可以相互调用
下面是我的实现代码

#include "stdio.h"
#include <wtypes.h>
#include <string.h>
int x;
BOOL TestAddress()
{
 int x,y,z;
 x=4;
 y=5;
 z=x+y;
 return true;
}


	

BOOL calc(BYTE * pSorptr,OUT int& sum)
{

 
   while (*pSorptr!=0xC3)
   {
	  pSorptr++;
	  sum++;
  }

 sum++;
return true;
}

void main()
{
	int sum=0;
	int dwRav=0;
	
	BYTE * pTestAddress=(BYTE*)TestAddress;
	dwRav=*((DWORD *)(pTestAddress+1));
	BYTE * pSorptr=pTestAddress+5+dwRav;
	calc(pSorptr,sum);
	BYTE * pDesptr=(BYTE *)malloc(sum);
	memset(pDesptr,0,sum);
	memcpy(pDesptr,pSorptr,sum);
	__asm
	{
		call pDesptr
	}
	free(pDesptr);

	
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
2
一样啊,把另外一个func的地址当参数给过去
2011-1-8 16:59
0
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
那多复杂啊
我的目的 就是能想正常一样访问函数
比如 我复制二个函数的内容
我其中一个函数想调用令外一个函数
难道我还内嵌汇编不成
我不想用汇编
因为 我要拷贝的代码比较多
扩展性也不好
2011-1-8 17:37
0
雪    币: 2687
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果函数TestAddress中仍有需要重定位的函数调用导致的异常有什么好的解决办法?
2011-1-8 17:50
0
雪    币: 1149
活跃值: (833)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
5
貌似 程序中只要用到 直接调用函数  都会出现 堆栈问题。。这种拷贝的程序,只能自己写自己的函数。。
编译以后的,编译器加了很多堆栈检测的函数。。。(更准确的说就是 重定位出了问题(编译器加入的__chkesp)),这个不怎么好解决。。特别是编译器自己加的函数。。。
********
不是所有函数都会加_chkesp,对与ESP绝对不会被破坏的情况,编译器就没有必要再加这个检查
所以如果你在程序里调用了有参数的函数,都会有问题。。
********
所以你说的几个函数在一个空间调用,这里就应该是主要问题。。。

ps:个人愚见。。。错了不要见怪, 学习交流为主。。。
2011-1-8 20:04
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
6
对于这种情况,最好还是自己用汇编写函数体,把需要重定位的地址作为变量放在固定位置(例如函数起始位置,用jmp跳过),拷贝代码的时候,完成重定位信息。
对于VS编译的代码,有时会添加一些检测的代码,所以最好还是用naked函数
2011-1-8 22:24
0
游客
登录 | 注册 方可回帖
返回
//