-
-
[求助]请大家看一个程序
-
发表于:
2007-1-6 14:26
3899
-
程序不是很长,在VC6.0下编译通过,但运行发生异常。
这是一篇英文文章里面的代码 ,名字叫Self Modifying Code 谁有兴趣和我一起学习,可以发给他;
#include<stdio.h>
void Demo(int (*_printf) (const char *,...))
{
_printf("Hello, OSIX!n");
return;
}
int main(int argc, char* argv[])
{
char buff[1000];
int (*_printf) (const char *,...); //声明一个函数指针
int (*_main) (int, char **); //函数指针
void (*_Demo) (int (*) (const char *,...)); //函数指针
_printf=printf; //_printf指向printf
int func_len = (unsigned int)_main-(unsigned int)_Demo;//取得函数指针长度,很明显应该等于4
for (int a=0; a<func_len; a++)
buff[a] = ((char *)Demo)[a]; //拷贝指针到数组buff[1000]
_Demo = (void (*) (int (*) (const char *,...))) &buff[0];
_Demo(_printf);
return 0;
}
这个程序原意是先将函数Demo()的地址拷贝到buff,然后把buff的地址赋值给_Demo 然后调用_Demo(_printf)
调试时不知道什么原因,Demo的地址并没有传给_Demo.不知道问题出在哪儿。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法