游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1663|回复: 3

急,关于函数指针的问题,253先了。

[复制链接]

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-23 12:28:00 | 显示全部楼层 |阅读模式
平台:Linux
语言:C++
编译器:GNU C/C++ 3.0 以上
问题:
已知一些参数,和一个函数指针,该函数指针通过:
void *f = dlsym(dl_handler, "xxx");
获得,但是不知道参数情况,任务是要把已知的参数传入这个函数指针
并呼叫,不管成功与否,该模块就是一个中间件,只负责把别的模块传
进来的参数传递给从动态连接库里面获取到的函数指针。

开始用:
asm("push %0;"
        "push %1;"
        "push %2;"
     : /*no outputs*/
     : "r"(var1), "r"(var2), "r"(var3));
这样把参数压入栈,然后用call f来呼叫函数。

结果发现执行完f函数之后,esp的值不对,于是在push之前记录下
esp的值到一个临时变量,call完f之后,再把esp的值改回来,这样
虽然可以呼叫f了,但是还有一个问题,就是我如何获得f的返回值呢?

6

主题

48

帖子

48

积分

注册会员

Rank: 2

积分
48
发表于 2004-6-23 14:21:00 | 显示全部楼层

Re:急,关于函数指针的问题,253先了。

有些函数自己会平衡堆栈,有些需要调用者平衡,这就是经常会看到在CALL XXXXXXXX后会有ADD ESP,XX的原因.
返回值一般在EAX里面....

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
 楼主| 发表于 2004-6-23 15:39:00 | 显示全部楼层

Re:急,关于函数指针的问题,253先了。

恩,谢谢楼上的。。=)

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
 楼主| 发表于 2004-6-23 16:31:00 | 显示全部楼层

Re:急,关于函数指针的问题,253先了。

对了,那么如何知道该函数是否有返回呢?
应该不是通过检查EAX是否为空吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-2 12:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表