stack "anlegen"



  • Hi,

    also ich bin ein ziemlicher assembler neuling
    ich wollt mal frage wie ich speicher im stack reservieren kann.

    so etwas in c++

    void Test()
    {
    	char szFile[ 65536 ];
    	szFile[ 0 ] = 'A';
    	szFile[ 1 ] = 'B';
    	...
    }
    

    soweit bin ich gekommen, scheint aber nicht zu funktionieren

    push ebp
    mov ebp, esp
    
    sub esp, 65536
    
    mov [ebp - 65536], 'A'
    mov [ebp - 65535], 'B'
    ...
    
    mov esp, ebp
    pop ebp
    


  • Hi.

    Was fuer Fehler treten denn auf?



  • der speicher ist nicht gültig, aber der stack sollte eigentlich groß genug sein. ich hab das ganze als inline assembler mal getestet...

    void Test()
    {
    	char szFile[ 65536 ]; 
    	szFile[ 0 ] = 'A'; 
    	szFile[ 1 ] = 'B'; 
    	... 
    }
    
    __declspec( naked ) void Test2()
    {
    	__asm
    	{
    		push ebp;
    		mov ebp, esp;
    
    		sub esp, 65536;
    
    		mov [ebp - 65536], 'A';
    		mov [ebp - 65535], 'B';
    		...
    
    		mov esp, ebp;
    
    		pop ebp;
    
    		ret;
    	}
    }
    
    void main()
    {
    //	Test();
    	Test2();
    }
    

    wenn ich Test aufrufe wird scheinbar der stack "angelegt" und ist dann auch in Test2 gültig. ruf ich das nicht auf, ist der speicher bereich ungütltig. durch Test scheint der stack irgendwie aufgebaut zu werden.


Anmelden zum Antworten