注册
登录
会员
标签
鲜花鸡蛋
插件
帮助
Linux伊甸园论坛
»
C/C++ (STL/boost)
» 【求助】知道程序的入口地址,如何去调用此程序?
‹‹ 上一主题
|
下一主题 ››
15
1
2
››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
【求助】知道程序的入口地址,如何去调用此程序?
neilshiI
初来乍到
注册用户
帖子
10
精华
0
积分
5
鲜花
0
鸡蛋
0
在线时间
0 小时
发短消息
加为好友
当前离线
楼主贴
大
中
小
发表于 2006-6-21 09:06
只看该作者
【求助】知道程序的入口地址,如何去调用此程序?
请问各位高手:我知道一个程序的入口地址,想去调用这个程序,用C语言要怎么样去写?
6 V G) u/ o5 @9 ~: O% F
如果用汇编就是 call CS:IP 就可以实现这样的功能。用 C呢 ?
* F6 P7 P2 Z+ D1 _3 o: ?) I* c
谢谢
UID
161272
帖子
10
精华
0
积分
5
贡献积分
0
论坛活跃
10
公关推广
10
鲜花
0
鸡蛋
0
在线时间
0 小时
注册时间
2006-6-21
最后登录
2006-7-19
查看详细资料
TOP
flag
版主
版主
帖子
5584
精华
1
积分
467
鲜花
0
鸡蛋
0
在线时间
54 小时
发短消息
加为好友
当前离线
呵呵抢到沙发了
大
中
小
发表于 2006-6-21 09:26
只看该作者
一个程序的入口地址?这个程序已经运行了?
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
UID
19801
帖子
5584
精华
1
积分
467
贡献积分
28
论坛活跃
2176
公关推广
12
鲜花
0
鸡蛋
0
在线时间
54 小时
注册时间
2002-7-19
最后登录
2008-7-15
查看详细资料
TOP
neilshiI
初来乍到
注册用户
帖子
10
精华
0
积分
5
鲜花
0
鸡蛋
0
在线时间
0 小时
发短消息
加为好友
当前离线
板凳位置
大
中
小
发表于 2006-6-21 10:06
只看该作者
我要调用的程序已经编译成二进制文件,而且已经放到了内存中。在内存中的地址也是知道的。并且这个程序的entry也知道。在汇编里我可以直接用 call 0000:C0000004 就可以,可是用C语言我不知道该怎么表达。
UID
161272
帖子
10
精华
0
积分
5
贡献积分
0
论坛活跃
10
公关推广
10
鲜花
0
鸡蛋
0
在线时间
0 小时
注册时间
2006-6-21
最后登录
2006-7-19
查看详细资料
TOP
flag
版主
版主
帖子
5584
精华
1
积分
467
鲜花
0
鸡蛋
0
在线时间
54 小时
发短消息
加为好友
当前离线
只剩马扎了
大
中
小
发表于 2006-6-21 11:51
只看该作者
对于C语言的话也就是说从编译的角度上来说是怎么看待函数的?一段C的代码转换成汇编,函数入口被换成相应的标号,如果你把这个标号换成合适的函数指针自然可以赋值调用,但有个问题是,对于现代操作系统来说,程序的运行空间互相独立,彼此之间应该是不能随便的访问进程空间,即便是调用函数,也要先压栈处理返回地址等寄存器,你打算怎么处理这个问题呢?
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
UID
19801
帖子
5584
精华
1
积分
467
贡献积分
28
论坛活跃
2176
公关推广
12
鲜花
0
鸡蛋
0
在线时间
54 小时
注册时间
2002-7-19
最后登录
2008-7-15
查看详细资料
TOP
neilshiI
初来乍到
注册用户
帖子
10
精华
0
积分
5
鲜花
0
鸡蛋
0
在线时间
0 小时
发短消息
加为好友
当前离线
委屈了,只有地板
大
中
小
发表于 2006-6-21 16:19
只看该作者
我做的是linux bios,这些代码都发生在进入OS之前,所以我想应该牵扯不到进程的问题。我所想调用的程序其实是主板上一些设备的option rom , 也就是一些设备的初始化,配置等程序。这些东西一般都由设备的厂商直接提供,我们只需要拿来用就好了。在计算机启动的过程中,会将这些option rom
, {1 Y! T: l9 t
放到内存中的一段地址,然后回跳到这个地址去执行它。我现在很困惑的是怎样从自己的程序跳到那个位置,进入其entry。
* U! f" O6 ?+ Q* f% n9 @# I
谢谢
UID
161272
帖子
10
精华
0
积分
5
贡献积分
0
论坛活跃
10
公关推广
10
鲜花
0
鸡蛋
0
在线时间
0 小时
注册时间
2006-6-21
最后登录
2006-7-19
查看详细资料
TOP
lbwdevil
初来乍到
注册用户
帖子
16
精华
0
积分
7
鲜花
0
鸡蛋
0
在线时间
0 小时
发短消息
加为好友
当前离线
6楼
大
中
小
发表于 2006-6-21 16:41
只看该作者
在C里面嵌入汇编应该可以吧
UID
158976
帖子
16
精华
0
积分
7
贡献积分
0
论坛活跃
16
公关推广
10
鲜花
0
鸡蛋
0
在线时间
0 小时
注册时间
2006-5-23
最后登录
2007-3-1
查看详细资料
TOP
neilshiI
初来乍到
注册用户
帖子
10
精华
0
积分
5
鲜花
0
鸡蛋
0
在线时间
0 小时
发短消息
加为好友
当前离线
7楼
大
中
小
发表于 2006-6-21 19:06
只看该作者
因为程序的主体是C语言,所以我希望能通过C语言来实现。:p 谢谢
UID
161272
帖子
10
精华
0
积分
5
贡献积分
0
论坛活跃
10
公关推广
10
鲜花
0
鸡蛋
0
在线时间
0 小时
注册时间
2006-6-21
最后登录
2006-7-19
查看详细资料
TOP
flag
版主
版主
帖子
5584
精华
1
积分
467
鲜花
0
鸡蛋
0
在线时间
54 小时
发短消息
加为好友
当前离线
8楼
大
中
小
发表于 2006-6-22 09:50
只看该作者
可能前面没有讲清楚我说的问题,你如果跳转到那里,执行了之后照理应该返回到调用处吧,你肯定那段代码之后会有返回的?还是不用返回了?
' V" [$ ` m% U' C7 L- M
你既然已经知道这些option rom会映射到内存中的一段地址,直接用指针函数就可以转到那里,但前面的问题怎么办?
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
UID
19801
帖子
5584
精华
1
积分
467
贡献积分
28
论坛活跃
2176
公关推广
12
鲜花
0
鸡蛋
0
在线时间
54 小时
注册时间
2002-7-19
最后登录
2008-7-15
查看详细资料
TOP
morninglight
初来乍到
注册用户
帖子
26
精华
0
积分
9
鲜花
0
鸡蛋
0
在线时间
0 小时
发短消息
加为好友
当前离线
9楼
大
中
小
发表于 2006-6-22 10:23
只看该作者
比如你的函数是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 [
就可以调用你的函数了
UID
159661
帖子
26
精华
0
积分
9
贡献积分
0
论坛活跃
26
公关推广
10
鲜花
0
鸡蛋
0
在线时间
0 小时
注册时间
2006-5-31
最后登录
2007-8-28
查看详细资料
TOP
海天一色
认证会员
注册用户
帖子
463
精华
0
积分
138
鲜花
0
鸡蛋
0
在线时间
15 小时
发短消息
加为好友
当前离线
10楼
大
中
小
发表于 2006-6-22 14:54
只看该作者
已经知道了地址,那函数类型知道吗?
; z* F6 U8 A1 o% D
如果知道可以设置一个函数指针或空指针,然后赋值给它。
9 b2 k* m' h K& w' s' W
也就是斑竹所说的。
0 w5 x j7 f7 {
返回值就要看具体函数了。
UID
49855
帖子
463
精华
0
积分
138
贡献积分
69
论坛活跃
328
公关推广
10
鲜花
0
鸡蛋
0
在线时间
15 小时
注册时间
2003-7-7
最后登录
2008-6-16
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
15
1
2
››
控制面板首页
编辑个人资料
积分记录
公众用户组
勋章
访问推广
领取红包
基本概况
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队
管理统计
best dvd copy software