70,036
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
//这个函数是准备把其变成机器码的.
int print(){
double x=99999;
while(x){
x--;
}
return 10;
}
typedef int (*pf)();
int main()
{
unsigned char* f=(unsigned char*)&print;
//我的想法是分配出1000个内存单元,然后不释放,为了常驻.
//然后把机器码复制进去,那么就可以找到buf的地址进行调用了.
char* buf=(char*)malloc(sizeof(char)*1000);
//下面这些是print的机器码
char run[] = "\x55\x89\xe5\x83\xec\x08\xdd\x05\x00\x30\x40\x00\xdd\x5d\xf8\xdd\x45\xf8\xd9\xee\xd9\xc9\xda\xe9\xdf\xe0\x9e\x75\x04\x7a\x02\xeb\x0c\xdd\x45\xf8\xd9\xe8\xde\xe9\xdd\x5d\xf8\xeb\xe2\xb8\x0a\x00\x00\x00\xc9\xc3";
int s = 0;
int n=strlen(buf)/4;
int i;
//把run的内容复制到buf
for(i=0;i<n;i++)
sscanf(run+4*i,"\\x%02x",buf+i);
//为了方便,在这写取得机器码的语句
while(1){
printf("\\x%02x", *f);
if(*f==0xc3) break;
f++;
}
pf func = (pf)run; //这样用可以.
//pf func = (pf)buf; //为什么这样用不可以呢
s = func();
printf("\n%d\n",s);
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
//这个函数是准备把其变成机器码的.
int print(){
double x=99999;
while(x){
x--;
}
return 10;
}
typedef int (*pf)();
int main()
{
unsigned char* f=(unsigned char*)&print;
//我的想法是分配出1000个内存单元,然后不释放,为了常驻.
//然后把机器码复制进去,那么就可以找到buf的地址进行调用了.
char* buf=(char*)malloc(sizeof(char)*1000);
//下面这些是print的机器码
char run[] = "\x55\x89\xe5\x83\xec\x08\xdd\x05\x00\x30\x40\x00\xdd\x5d\xf8\xdd\x45\xf8\xd9\xee\xd9\xc9\xda\xe9\xdf\xe0\x9e\x75\x04\x7a\x02\xeb\x0c\xdd\x45\xf8\xd9\xe8\xde\xe9\xdd\x5d\xf8\xeb\xe2\xb8\x0a\x00\x00\x00\xc9\xc3";
int s = 0;
int n=sizeof run;
int i;
//把run的内容复制到buf
for(i=0;i<n;i++)
buf[i]=run[i];
memcpy(buf, run, sizeof run);
//为了方便,在这写取得机器码的语句
while(1){
printf("\\x%02x", *f);
if(*f==0xc3) break;
f++;
}
pf func = (pf)run; //这样用可以.
pf func1 = (pf)buf; //为什么这样用不可以呢
s = func();
printf("\n%d\n",s);
s = func1();
printf("\n%d\n",s);
system("pause");
return 0;
}
//复制得有问题
int n=sizeof run;
int i;
//把run的内容复制到buf
for(i=0;i<n;i++)
buf[i]=run[i];
//上面是方法1
memcpy(buf, run, sizeof run);
//上面是方法2
你任选 一种就是,在源码里我两个都写了
while(1){
printf("\\x%02x", *f);
if(*f==0xc3) break;
f++;
}