2010-11-01 98 views
1

比方說,例如,我使用一些彙編代碼將大量數據推送到堆棧上。我的問題是,是否可以通過將棧指針的地址傳遞給C++程序(或其他方式)來操作這些數據,如C++?如果是這樣,C++將如何處理這些數據?意思是,我將如何確定C++中的數據類型?語言之間的堆棧數據

+2

我會說不要使用堆棧來進行「通信」。使用通常的參數傳遞/內存。 – 2010-11-01 17:27:31

回答

4

是的,你可以做到這一點,當然你必須正確使用調用約定,以便數據清楚地表明C++代碼使用堆棧的任何區域。堆棧內存只是內存,就接收這個指針的代碼而言,將一些值推入堆棧或移動堆棧指針(即在堆棧上創建一個數組/結構)並寫入值進入你創建的空間,或者只是動態地分配一些內存並將值放入。你的彙編程序推送指令將值放在某個特定的佈局中。

您無法確定數據類型。例如,在x86上,兩個並排的32位int值與完全相同,爲64位long long值。這就是爲什麼調用約定會指定堆棧中參數的佈局,並要求調用者和被調用者都知道(並同意)參數的順序和類型。

當然,您可以提供額外的信息,它允許被調用者計算出數據類型。例如,printf的第一個參數是指向格式字符串的指針,通過解析格式字符串,被調用者知道這個特定調用的剩餘參數的類型,然後可以使用可變參數宏讀取它們。

2

我相信它都需要在同一個過程中運行。但是,難道你不能只是在C++中鍵入一個結構來確定數據類型,並且將一個頭添加到你放入堆棧的信息中,以指示數據的佈局方式。

+0

是的,而且如果我要通過堆棧傳遞這些數據,很可能會有一種正式格式需要推送,並且C++程序會以此格式讀取它。 – 2010-11-01 17:48:52