如何用c语言在自己程序中执行另一个程序中(假如不是自己的)的函数
如何用c语言在自己程序中执行另一个程序中(假如不是自己的)的函数///////////test.c#include<stdio.h>intmain(){inttest()...
如何用c语言在自己程序中执行另一个程序中(假如不是自己的)的函数
///////////test.c
#include<stdio.h>
int main()
{
int test();
int (*exp)();
printf("%x\n",test);
test();
exp=test;
(*exp)();
return 0;
}
int test()
{
printf("booo\n");
return 0;
}
/////////////exploit.c
#include<stdio.h>
int main()
{
int add;
int (*exp)();
scanf("%x",&add);
exp=add;
(*exp)();
return 0;
}
执行结果:
y@y-laptop:~/projects/testexploit$ ./test
40059c
booo
booo
y@y-laptop:~/projects/testbufferexploit$ ./exploit
40059c
Segmentation fault (core dumped)
问题:如何用exploit执行test中的test函数,不要告诉我include头文件那样的 展开
///////////test.c
#include<stdio.h>
int main()
{
int test();
int (*exp)();
printf("%x\n",test);
test();
exp=test;
(*exp)();
return 0;
}
int test()
{
printf("booo\n");
return 0;
}
/////////////exploit.c
#include<stdio.h>
int main()
{
int add;
int (*exp)();
scanf("%x",&add);
exp=add;
(*exp)();
return 0;
}
执行结果:
y@y-laptop:~/projects/testexploit$ ./test
40059c
booo
booo
y@y-laptop:~/projects/testbufferexploit$ ./exploit
40059c
Segmentation fault (core dumped)
问题:如何用exploit执行test中的test函数,不要告诉我include头文件那样的 展开
展开全部
看你的执行顺序应该是分别执行两个 .c 文件。就是两个独立的进程。每个进程有相互独立的虚拟地址空间。你所得到的40059c是另一个进程的函数地址。 在exploit中的40059这个地址是非法使用的。要想在一个进程中使用另一个进程的函数,就必须要用进程间通信。如共享内存,注册函数,共用此函数。
看你的意图是想要在一个文件中利用函数指针调用别的文件中的函数。如果说你只是想要熟悉一下函数指针,那么这种方法是不可取的。因为函数在定义是并不分配存储空间,在调用的时候在栈中分配存储空间,返回时释放。
要想用数值强转成函数地址。这个函数的地址就必须不能改变。那么就需要将函数声明为静态函数。这样麻烦又来了,静态函数是文件内部使用,外部不能引用。所以,你这种做法是不可取的。
看你的意图是想要在一个文件中利用函数指针调用别的文件中的函数。如果说你只是想要熟悉一下函数指针,那么这种方法是不可取的。因为函数在定义是并不分配存储空间,在调用的时候在栈中分配存储空间,返回时释放。
要想用数值强转成函数地址。这个函数的地址就必须不能改变。那么就需要将函数声明为静态函数。这样麻烦又来了,静态函数是文件内部使用,外部不能引用。所以,你这种做法是不可取的。
展开全部
你的想法是好的,但现实是残酷的,你这想法是没办法实现的.当然,也不是完全没办法,还是可以用进程间通讯的方式来实现的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看到你对其他人的追问,想说的是如你现在有函数的原型(函数的声明),但没有函数体的定义,不过现在函数体A.exe,B.exe中想调用它是吗?
如果是这种情况,如果A.exe和B.exe都想使用同一个函数,得把函数放在DLL模块中,声明为导出,这样DLL模块的PE导出表才会有函数的信息,其他程序就能通过GetProcAddress获取函数的指针.
如果是这种情况,如果A.exe和B.exe都想使用同一个函数,得把函数放在DLL模块中,声明为导出,这样DLL模块的PE导出表才会有函数的信息,其他程序就能通过GetProcAddress获取函数的指针.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-10
展开全部
如果你不想用头文件include,那么就用extern声明该函数,前提是编译系统能够找到该函数所在的原型
具体到本例,就是编译系统要知道test.c在哪里,一般放在同一个文件夹下面就可以
如果不在同一文件夹下,最好还是include头文件,在头文件中声明
具体到本例,就是编译系统要知道test.c在哪里,一般放在同一个文件夹下面就可以
如果不在同一文件夹下,最好还是include头文件,在头文件中声明
更多追问追答
追问
其实我是想实践用指针调用函数,我想自己程序的指针调用另一个程序中的函数,而且在没有另一个程序的源文件的情况下.
追答
函数指针也不能平白无故指向一个函数吧,总要有一个具体的函数对象才行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询