[英]Instantiating a c++ class in x86 (32bit) assembly (Passing a c++ class by copy to a method in assembly)
在我的項目中,除了許多其他方面,我還要從匯編中調用c ++方法並按副本傳遞類。 如果我可以通過引用傳遞它會很簡單,但我不能。
我假設它看起來像這樣:創建一個新類的實例; 將類的屬性復制到新類的屬性; 將指向新類的指針推入堆棧; 打電話給方法; 調用類的析構函數,它是另一個類的副本。
所以真正的問題是,如何實例化在匯編中用c ++創建的類?
非常感謝大家。
編輯:我正在使用Fedora 14驅動的x86個人計算機上的gcc。
創建類對象與創建普通堆棧變量沒有太大區別。 你只需要調用(copy-)構造函數。
您在堆棧上為本地類對象創建空間,推送對象以從堆棧上創建副本(作為復制ctor的參數),傳遞本地空間的地址1)並最終調用復制構造函數你想要創建的課程。
然后將該本地對象推入堆棧並調用您的函數。 然后再次傳遞本地對象的地址1)並調用析構函數。
如何准確編碼取決於您的平台/架構。
1) ecx
寄存器用於在MSVC上傳遞this
指針。 GCC this
作為隱藏的第一個參數傳遞。 差異總結在這里 。 只知道x86架構,而不是其他人,對不起。
與匯編有關的任何事情都取決於您所編寫的處理器和平台。
執行所要求的最安全的方法是在堆棧上為類的新對象分配空間,並生成對類的復制構造函數的調用。
一般答案:實例化C ++類涉及生成對構造函數的調用。
這似乎不是最實用的練習...通常在C ++中使用匯編,而不是通過asm
關鍵字。 在極少數情況下,使用普通的C接口層(通過extern "C"
),而不是C ++應用程序二進制接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.