我可以将char *数组而不是几个参数传递给函数吗?

问题描述 投票:1回答:1

我正在尝试编写一个程序,该程序将使用用户输入的名称,参数及其类型从动态库运行功能。我可以使用dlsym(func_name)获得指向该函数的void *指针,但是我事先不知道参数的类型及其数量,因此无法以正常方式取消对该指针的引用。

如果将所有参数的字节表示形式复制到char *数组中,我可以调用以该数组作为参数的函数吗?例如,在程序集中调用printf时,我可以将参数和格式字符串推入堆栈,然后调用printf。也许我可以在C中做类似的事情,或者使用汇编插入?

例如,假设函数为void func(int,double);我得到了int a,double b的参数。然后,我将创建一个数组:

char buf[sizeof(int) + sizeof(double)]
memcpy(buf, &a, sizeof(int))
memcpy(buf + sizeof(int), &b, sizeof(double))

并将其用作推入堆栈的参数。

c dynamic-linking
1个回答
0
投票

没有任何计算环境都有关于如何传递参数的规范。参数的类型和大小会影响它们是否在常规寄存器,浮点寄存器或其他位置中传递,以及它们的对齐方式。很少有这样的规范将参数作为原始字节转储传递给堆栈。

© www.soinside.com 2019 - 2024. All rights reserved.