簡體   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