15 12
发新话题
打印

【求助】知道程序的入口地址,如何去调用此程序?

【求助】知道程序的入口地址,如何去调用此程序?

请问各位高手:我知道一个程序的入口地址,想去调用这个程序,用C语言要怎么样去写?
& H8 E$ l! u! f) o7 ?5 n' [4 p 如果用汇编就是  call  CS:IP 就可以实现这样的功能。用 C呢 ?- D( e- Z: m" Z7 \6 y
谢谢      

TOP

一个程序的入口地址?这个程序已经运行了?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

我要调用的程序已经编译成二进制文件,而且已经放到了内存中。在内存中的地址也是知道的。并且这个程序的entry也知道。在汇编里我可以直接用 call 0000:C0000004 就可以,可是用C语言我不知道该怎么表达。      

TOP

对于C语言的话也就是说从编译的角度上来说是怎么看待函数的?一段C的代码转换成汇编,函数入口被换成相应的标号,如果你把这个标号换成合适的函数指针自然可以赋值调用,但有个问题是,对于现代操作系统来说,程序的运行空间互相独立,彼此之间应该是不能随便的访问进程空间,即便是调用函数,也要先压栈处理返回地址等寄存器,你打算怎么处理这个问题呢?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

我做的是linux bios,这些代码都发生在进入OS之前,所以我想应该牵扯不到进程的问题。我所想调用的程序其实是主板上一些设备的option rom , 也就是一些设备的初始化,配置等程序。这些东西一般都由设备的厂商直接提供,我们只需要拿来用就好了。在计算机启动的过程中,会将这些option rom& A& ^# k6 Y) g9 S; F* c4 H
放到内存中的一段地址,然后回跳到这个地址去执行它。我现在很困惑的是怎样从自己的程序跳到那个位置,进入其entry。
. @" y6 \0 Q  S$ u! i# t) A谢谢      

TOP

在C里面嵌入汇编应该可以吧      

TOP

因为程序的主体是C语言,所以我希望能通过C语言来实现。:p 谢谢      

TOP

可能前面没有讲清楚我说的问题,你如果跳转到那里,执行了之后照理应该返回到调用处吧,你肯定那段代码之后会有返回的?还是不用返回了?
8 V7 B- y) I) P6 F  w; L4 K  [你既然已经知道这些option rom会映射到内存中的一段地址,直接用指针函数就可以转到那里,但前面的问题怎么办?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

比如你的函数是int aa(int p1,int p2)9 t+ I2 {& M' S
int (*func)(int,int) = aa;: x% a6 x% I7 V$ N. x
int rst = 0;
# j, @+ S% E  B8 i& Erst = func(p1,p2);& X( \3 Q2 P' e( W
就可以调用你的函数了      

TOP

已经知道了地址,那函数类型知道吗?
" O: ~8 E& I) c/ j3 O如果知道可以设置一个函数指针或空指针,然后赋值给它。
9 Z, z1 |. L9 R- \也就是斑竹所说的。
& a' U$ s2 m6 \3 {, ]6 k返回值就要看具体函数了。      

TOP

 15 12
发新话题