如何从 return 类型未知的函数中获取 c/c++ 中的字节数组?

How to get a byte array in c/c++ from a function with unknown return type?

例如,我知道函数的地址(可以说它是 0x0183ad0),我想从该函数中获取一个 return 未知类型的对象:

unknownType(*fname)() = (unknownType(*)())0x0183ad0

是否有我可以用任何全局类型替换 unknownType 或任何方法将该对象作为字节数组(我知道 sizeof(unknownType)

注意:

函数return一个对象不是指针


编辑:

由于 Botje 的回答,它起作用了:

“字节数组”将是 uint8_t*unsigned char*

如果你知道 unknownType 的大小,我会创建一个

struct unknownType {
    uint8_t stuff[123];
};

因此您可以在更好地理解其字段时调整结构定义。

您可以定义一个 void 函数指针,并将该原型用于您具有以下地址的每个函数:本例中的 return 值是一个随机结构,它可以是整个数组无论你想要什么字节,整数,字符 - 这对于每个调用的函数当然可以不同,只要函数签名相同(如果他们需要不同的输入,你总是可以在参数列表上添加一个空指针)

#include <stdio.h>

typedef struct _RANDSTRUCT 
{
    int Num ;
} RANDSTRUCT ;

typedef void * UNKNOWNFUNC (void) ;

UNKNOWNFUNC *myFunc() ;

int main()
{
    void *retP ;
    UNKNOWNFUNC *fnP ;
    
    retP = myFunc () ;

    printf ("Num %d (direct call)\n", ((RANDSTRUCT *)retP)->Num) ;

    fnP = (void *)&myFunc ;
    retP = fnP () ;
    
    printf ("Num %d (fn addr call)\n", ((RANDSTRUCT *)retP)->Num) ;
    
    return 0;
}

UNKNOWNFUNC *myFunc () {
    static RANDSTRUCT randstruct[2] = {100, 200} ;
    
    return ((void *)&randstruct[0]) ;
}

How to get a byte array in c/c++ from a function with unknown return type?

在 C++ 中调用函数的唯一方法是了解其 return 类型。如果您不知道 return 类型,则无法调用该函数,因此您无法获得由该函数 return 编辑的对象。

It worked thanks to Botje's answer

它可能看起来有效,但程序的行为是未定义的。