我有一個關於nasm及其與C++的鏈接的問題。我宣佈豆蔻測試功能nasm/yasm參數,與C++的鏈接
extern "C" void __cdecl myTest(byte i1, byte i2, int stride, int *width);
,我這樣稱呼它:
byte i1 = 1, i2 = 2;
int stride = 3, width = 4;
myTest(i1, i2, stride, &width);
該方法只用於調試組裝和看看堆棧指針是如何用來獲取參數。除此之外,指針參數值應設置爲7,以確定其工作原理。實現此方法是這樣的:
global _myTest
_myTest:
mov eax, [esp+4] ; 1
mov ebx, [esp+8] ; 2
mov ecx, dword [esp+16] ; width
mov edx, dword [esp+12] ; stride
mov eax, dword [esp+16]
mov dword [eax], 7
ret
和編譯經由
yasm -f win32 -g cv8 -m x86 -o "$(IntDir)\$(InputName).obj" "$(InputPath)"
,然後連接至C++應用程序。在調試模式下,一切正常。該函數被調用幾次並按預期工作,而在釋放模式下該函數只工作一次,但隨後的編程操作失敗。在我看來,堆棧/幀指針是近/遠的,但我對這個主題很陌生,需要一點幫助。提前致謝! a。