按照DOCO我可以找到關於調用Windows函數,應用如下: -窗口64位調用約定
微軟64位調用約定[12] [13]隨後在Windows和預啓動UEFI(用於在x86-64上的長模式)。它使用寄存器RCX,RDX,R8,R9作爲前四個整數或指針參數(按此順序),並將附加參數壓入堆棧(從右到左)。如果64位或更少,整數返回值(類似於x86)將在RAX中返回。
在Microsoft x64調用約定中,調用者有責任在調用函數之前在堆棧上分配32個字節的「影子空間」(不管實際使用的參數數量是多少),並在彈出堆棧後彈出堆棧呼叫。陰影空間用於溢出RCX,RDX,R8和R9,但是必須使所有功能都可用,即使參數少於4個也是如此。
。寄存器RAX,RCX,RDX,R8,R9,R10,R11被認爲是易失性(呼叫者保存)。[15]
。寄存器RBX,RBP,RDI,RSI,RSP,R12,R13,R14,和R15被認爲是非易失性的(被調用方保存)。[15]
所以,我一直在呼籲愉快KERNEL32直到在某些情況下未能調用「GetEnvironmentVariableA」。我終於追溯到這樣一個事實,即直接旗幟已經確定,我需要清除它。
我的問題。直到現在,我還沒有找到任何提及這一點的信息,並想知道在通話之前總是清除它是否明智。或者也許會導致其他問題。任何人都知道打電話的約定在這種情況下
81分鐘前