Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Assembler ::  Wie alloziert man Dynamischen Speicher?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Developer30
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.05.2011
Beiträge: 27
Beitrag Developer30 Mitglied 23:20:55 30.03.2012   Titel:   Wie alloziert man Dynamischen Speicher?            Zitieren

Hallo allerseits,

in C gibt es ja Funktionen wie malloc, calloc, realloc und free. Kann man irgendwie die C Library in Assembler (ich benutzte MASM32) einbinden? Oder gibt es eine andere Möglichkeit Speicher zu allozieren?

Mit freundlichen Grüßen,
Developer30
masm
Unregistrierter




Beitrag masm Unregistrierter 23:47:46 30.03.2012   Titel:   Re: Wie alloziert man Dynamischen Speicher?            Zitieren

Du kannst entweder die CRT Funktionen benutzen (crt_calloc,crt_malloc,...) oder die entsprechenden WinAPI Funktionen wie HeapAlloc(), GlobalAlloc(),...
Für dich vieleicht interessant, die Makros halloc() und alloc()

Code:
include \masm32\include\masm32rt.inc
...
mov edi,halloc(123) ; HeapAlloc()

(--> \masm32\help\hlhelp.chm)
Developer30
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.05.2011
Beiträge: 27
Beitrag Developer30 Mitglied 00:14:50 31.03.2012   Titel:              Zitieren

danke :)
Developer30
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.05.2011
Beiträge: 27
Beitrag Developer30 Mitglied 18:26:55 31.03.2012   Titel:              Zitieren

Ich habe versucht halloc anzuwenden, habe jedoch irgendetwas falsch gemacht :(. In folgendem Code erscheint zwar eine Message Box, jedoch ist sie leer (ohne Text, das Icon stimmt aber).

Assembler:
1
2
3
4
5
6
7
8
9
10
11
12
13
local Text:dword
local Zahl:dword
mov Text,halloc(5*sizeof(byte))
mov Zahl,halloc(5*sizeof(dword))
mov Text[0],"a"
mov Text[1],"b"
mov Text[2],"c"
mov Text[3],"d"
mov Text[4],0
mov Zahl[3],64
invoke MessageBoxA, 0, addr Text, addr Text, Zahl[3]
hfree Text
hfree Zahl


Wo liegt der Fehler? :confused:


Zuletzt bearbeitet von Developer30 am 18:28:57 31.03.2012, insgesamt 2-mal bearbeitet
masm
Unregistrierter




Beitrag masm Unregistrierter 19:20:53 31.03.2012   Titel:              Zitieren

Assembler ist keine Hochsprache und führt hier daher auch keine Dereferenzierung durch: mit Text[i] überschreibst du den Pointer und nicht die Daten auf die er zeigt. Text[1] entspricht hierbei dem Ausdruck [ebp+N+1], wobei N irgendein negatives vielfache von 4 ist, das von der Position in der Lokalen-Deklaration abhängt. Die Indizes beziehen sich immer auf BYTES.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
local Text:dword
local Zahl:dword
mov Text,halloc(5*sizeof(byte))
mov Zahl,halloc(1*sizeof(dword))
;...
mov esi,Text ; esi = pointer
mov edi,Zahl
 
mov CHAR ptr [esi][0],'h'
mov CHAR ptr [esi][1],'a'
mov CHAR ptr [esi][2],'l'
mov CHAR ptr [esi]+3,'l'  ;syntax variation
mov CHAR ptr [esi+4],'o'  ; "      "
mov CHAR ptr [esi][5],0   ; term. zero
 
mov DWORD ptr [edi],64
 
invoke MessageBoxA, 0, Text,  Text, DWORD ptr [edi]
hfree Text
hfree Zahl
Developer30
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.05.2011
Beiträge: 27
Beitrag Developer30 Mitglied 19:47:50 31.03.2012   Titel:              Zitieren

ah ok. Vielen dank, du hast mir sehr weitergeholfen! :)
c++.de :: Assembler ::  Wie alloziert man Dynamischen Speicher?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.