我需要通過知道它的地址,並沒有信息 原型(我不能將它轉換爲C函數指針)在C中調用函數。調用C地址作爲函數沒有原型
我對這個功能的信息是它的地址。
我也知道我想傳遞給它的參數(感謝void指針)和參數數組的大小(通過void指針訪問)。
我也想要尊重C調用約定。對於x86版本,我幾乎知道怎麼做(分配堆棧空間,將參數複製到 那個空間並最終調用該函數)。
現在的問題是x64約定(現在是Linux),其中參數是 通過寄存器。我不知道每個參數的大小要填寫 適當的寄存器,我只知道參數數組的大小。
此外,我不想依賴gcc,所以我不能使用__builtin_apply,似乎 是不標準的,也是非常黑暗。
我想寫我自己的一段代碼,以支持多編譯器,也可以到 學習有趣的東西。
因此,基本上,該函數我想要寫爲相同的原型 __builtin_apply它是:
void *call_ptr(void (*fun)(), void *params, size_t size);
我想也代碼將它寫在C(由於ASM內聯)或純的x64 ASM 。
那麼有沒有一種方法可以正確地做到這一點,並就 公約的慣例?或者,這是不可能的與x64公約不知道 確切的函數原型稱爲?
看看[libffi](http://sourceware.org/libffi/)。 – tangrs
這可能是一個很好的選擇,但libffi的問題是它需要知道每個參數的類型和函數的返回類型。如果可能,我想避免收集這些信息以避免時間浪費。那麼對於x64體系結構,這是可能的嗎? – Zerkan
@Zerkan不,它需要參數的類型,當調用一個函數而不知道參數時,沒有魔法可以將參數放置在正確的寄存器或堆棧空間中。 – nos