簡體   English   中英

在x86(32位)程序集中實例化c ++類(通過復制將c ++類傳遞給程序集中的方法)

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

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