1. 在32位匯編中,呼叫C函式,如printf函式,可以使用壓堆疊的方式傳遞多個引數。但是在呼叫64位的C函式庫上發現不能再使用這種壓堆疊的方式傳遞引數,網上找資料的時候只是簡單地說了一句不再支持單純的壓堆疊方式傳參,為什么不再支持壓堆疊這種方式傳參?
2. 因為printf函式是可變參函式,假如我需要傳遞的引數超過暫存器數量,那怎么辦?
3. 不支持壓堆疊方式傳參的函式是否只是官方提供的那幾個動態庫?若自己撰寫的動態庫是否可以使用彈堆疊的方式接受引數?還是已經從編譯生成動態庫的程序中限制了彈堆疊接參的方式?
求各位大神解答!!!
uj5u.com熱心網友回復:
1. 64位上,只支持使用__fastcall, 即所有引數串列中:fun(a, b, c,d,e, f, g), a使用ecx, b使用edx, c使用esi, d使用edi, e.f.g壓入堆疊中。(手寫,大概是這樣,精準描述自己查下資料)2: 如上
3:只要是64位exe.dll都如上。當然,自己寫匯編代碼,自已呼叫例外
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91646.html
標籤:C語言
