繁体   English   中英

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

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

例如,我知道函数的地址(假设它是0x0183ad0 ),我想从该函数中获取一个返回未知类型的对象:

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

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

笔记:

该函数返回一个对象 NOT A POINTER


编辑:

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

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

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

struct unknownType {
    uint8_t stuff[123];
};

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

您可以定义一个 void 函数指针并为您拥有地址的每个函数使用该原型: 本示例中的返回值是一个随机结构,它可以是您想要的任何字节、整数、字符的整个数组-这对于每个调用的函数当然可能不同,只要函数签名是相同的(如果它们需要不同的输入,你总是可以在参数列表上添加一个空指针)

#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]) ;
}

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

在 C++ 中调用函数的唯一方法是知道它的返回类型。 如果不知道返回类型,则无法调用该函数,因此无法获取该函数返回的对象。

多亏了 Botje 的回答,它才奏效

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM