15 12
发新话题
打印

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

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

请问各位高手:我知道一个程序的入口地址,想去调用这个程序,用C语言要怎么样去写?6 V  G) u/ o5 @9 ~: O% F
如果用汇编就是  call  CS:IP 就可以实现这样的功能。用 C呢 ?* F6 P7 P2 Z+ D1 _3 o: ?) I* c
谢谢      

TOP

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

TOP

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

TOP

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

TOP

我做的是linux bios,这些代码都发生在进入OS之前,所以我想应该牵扯不到进程的问题。我所想调用的程序其实是主板上一些设备的option rom , 也就是一些设备的初始化,配置等程序。这些东西一般都由设备的厂商直接提供,我们只需要拿来用就好了。在计算机启动的过程中,会将这些option rom
, {1 Y! T: l9 t放到内存中的一段地址,然后回跳到这个地址去执行它。我现在很困惑的是怎样从自己的程序跳到那个位置,进入其entry。
* U! f" O6 ?+ Q* f% n9 @# I谢谢      

TOP

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

TOP

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

TOP

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

TOP

比如你的函数是int aa(int p1,int p2)6 d0 m; d6 u0 e: s1 Y* c4 t
int (*func)(int,int) = aa;3 I$ P# n: d4 F" x: q
int rst = 0;7 Y2 }4 `! u# p0 [% \! K# u2 s; }
rst = func(p1,p2);
8 m& E' V2 c9 l/ ~) M8 N" w2 [就可以调用你的函数了      

TOP

已经知道了地址,那函数类型知道吗?; z* F6 U8 A1 o% D
如果知道可以设置一个函数指针或空指针,然后赋值给它。9 b2 k* m' h  K& w' s' W
也就是斑竹所说的。
0 w5 x  j7 f7 {返回值就要看具体函数了。      

TOP

 15 12
发新话题