[英]How to declare a function with variable arguments to be stdcall?
現在,我正在設計一個函數f(index,...)
,它將在傳遞其余參數的函數數組中調用#index條目。 如果您將函數數組視為服務列表,則f
作用類似於服務分配器。
f
用匯編語言編寫。 它彈出第一個參數index
然后計算相應的目標函數地址並對其進行jmp 。
如果我將n
參數傳遞給f
,則從目標函數返回時,堆棧僅保留n-1
個參數,因為index
是在中間彈出的。 因此,我不能使用cdecl
約定,否則調用者將錯誤地為n
參數清除堆棧。
stdcall
應該工作。 但是問題在於,由於f
具有可變參數 ,因此gcc似乎__attribute__((stdcall)) f(index,...)
不合理,並將其還原為cdecl
。
所以,請問有人可以告訴我如何將f
聲明為stdcall
嗎?
我認為使用stdcall不會解決您的問題,因為無論如何您都必須還原堆棧才能讓函數在堆棧上找到返回地址。
與其從堆棧中彈出index
,不如將其保留在那里。 要么修改目標函數以忽略第一個參數,要么在調用目標函數之前將所有其他參數向左移動一個位置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.