Zwei simple win32asm Fragen



  • Hi!
    Da ich leider nicht wirklich ein Buch besitze und die Tuts im Internet nicht wirklich das gelbe vom Ei sind frag ich einfach mal hier.

    Erstens:
    Ich möchte folgenden Code einfach ins Asm umschreiben:

    struct Hallo
    {
      int ABC;
    };
    
    void MacheABC(Hallo *Test)
    {
      Test->ABC = 100;
    }
    
    void main(void)
    {
      Hallo *H = (Hallo*)malloc(sizeof(Hallo));
      MacheABC(H);
    }
    

    Strukturen sind ja kein großes Problem. Aber zwei Sachen schon:
    - Wie macht man MALLOC und FREE unter Assembler?
    - Wie benutzt man Strukturen, von denen man nur die Speicheraddresse hat.



  • Eines der beiden Sachen hat sich grade geklärt. Durch ein bißchen ausprobieren hab ich einfach beim PTR mal das BYTE durch den Namen der Struktur ersetzt:

    .386
    .model flat, stdcall
    option casemap:none
    
    include windows.inc
    include kernel32.inc
    include user32.inc
    includelib kernel32.lib
    includelib user32.lib
    
    Hallo Struct
    	ABC DWord ?
    Hallo ends
    
    MacheABC proto :DWORD
    
    .data
       	Titel   	   	db   	'Titel',0
       	HelloWorld	db   	'Hello World',0
       	TestTest2		db   	'Nachricht 2',0
    
    .code
    start:
       	call    main   
    
       	Push 	0    
       	Call 	ExitProcess
    
       	main proc
    
       		LOCAL H:Hallo
    
       		mov H.ABC, offset HelloWorld
    
       		invoke MacheABC, addr H
       		invoke MacheABC, addr H
    
       		ret
       	main endp
    
       	MacheABC proc Pointer:DWORD
       		mov ebx, Pointer
       		invoke MessageBox,NULL, (Hallo ptr [ebx]).ABC, addr Titel, MB_OK
    
       		mov (Hallo ptr [ebx]).ABC, offset TestTest2
       		ret
       	MacheABC endp
    
    end start
    

    DENNOCH bleibt die Frage offen wie MALLOC und FREE geht



  • Hi!

    Guck dir mal im folgenden Link die Funktionen MyGetMem und MyFreeMem, diese benutzen DOS-Funktionen zum Reservieren bzw. Freigeben von Speicher:
    http://www.fh-wedel.de/~hu/asmaufgabe.html

    Vielleicht hilfts.

    Code-Hacker


  • Mod

    schau mal ins msdn
    die funktionen, die du brauchst, dürften wohl vor allem
    HeapAlloc und HeapFree sein, zu finden in kernel32.lib - es gibt dort selbstverständlich noch viel mehr nützliche sachen



  • http://win32asm.cjb.net

    und wie mein Vorposter sagte schau mal bei der Msdn vorbei, win32 asm zu programmieren heisst halt Windows Api Funktionen zu verwenden und Windows bietet nu für jeden Schrott was 😉

    bye

    tt



  • Ich glaub mit LocalAlloc/LocalFree kann man lokalen Speicher anfordern und wieder freigeben.
    GlobalAlloc/GlobalFree tut das selbe mit globalem Speicher...


Anmelden zum Antworten