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.htmlVielleicht hilfts.
Code-Hacker
-
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
-
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...