如何从 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
它可能看起来有效,但程序的行为是未定义的。
例如,我知道函数的地址(可以说它是 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
它可能看起来有效,但程序的行为是未定义的。