簡體   English   中英

如何在__stdcall中使用varargs而不使編譯器破壞堆棧

[英]How to use varargs with __stdcall without the compiler corrupting the stack

我遇到了MSVC和ICC的問題:

我需要使用帶有stdcall調用約定的變量參數,但是對於變量函數,編譯器將其忽略,並破壞了堆棧。

解決此問題的簡單方法是僅將參數數量作為參數之一,並在損壞之前抵消ESP ,但在這種情況下,我不需要該函數上下文的args數量,因此寧願避免使用它如果可能的話。

有人知道有沒有辦法做到這一點?

根據文檔

被調用者清理堆棧,因此編譯器使vararg函數__cdecl

鑒於此,我不確定您的期望如何。 如果stdcall要求被調用方清理堆棧,但是在vararg函數中,被調用方無法在編譯時知道堆棧中的內容,它將如何工作? 您希望stdarg va_list宏能夠操縱調用幀嗎? 我不認為這是Microsoft的看法,因此您的要求似乎不可能實現,至少不能通過使用Microsoft編譯器編寫C來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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