簡體   English   中英

如何聲明帶有可變參數的函數為stdcall?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM