Variablem in C++ aus einer Funktion benutzen...
-
Hallo ihr Freaks (sind wir das nicht alle?)
Hab hier ein klitzekleines Problem.
Also ich hab ne Funktion, nehmen wir die main funktion. Und darin sind Vars die ich ansprechen will..
Dann findet sie mir der Compiler net (im ASM Block)
Also mal nachgeschaut, aha in den Tutorials sind die Vars immer GLOBAL deklariert..
Also weiter geschaut und nichts gefunden. Hab schon versucht main als struct zu sehen und per
mov ebx,offset main
mov eax,[main]var
auf die Var zuzugreifen..
Für Hilfe wäre ich sehr dankbar..
Cya
-
Lokale Variablen werden auf dem Stack angelegt, also per
sub esp, 8
z.B. platz für 2 integer. Zugriff erfolgt dann per
[ebp-4] bzw. [ebp-8] (wenn ich mich nicht irre). Ergo haben lokale Variablen in Assembler überhuapt keine Symbolischen namen mehr. Man köntne natürlich makros deifnieren à la MAIN_I = [ebp - 4], MAIN_J = [ebhp - 8] oder so.
-
Gibt's da keine andere möglichkeit???
Irgendwie nen Namespace oder so herzubekommen..
Das wäre ja zum heulen..
Achja, kann man ASM Dateien eigentlich in CPP Datein mit reinkompilieren und linken..
Wenn ja, hat das jemand schon mal in der Praxis gemacht
-
Ok, hab jetzt schon ein bisschen was ausprobiert. Ist aber mega umständlich..
Das wird ne ganz schöne Kretze..
Aber mensch, irgendwas brauch man doch zum prollen *g*
-
Original erstellt von stealth00:
**Gibt's da keine andere möglichkeit???
Irgendwie nen Namespace oder so herzubekommen..
Das wäre ja zum heulen..
**Es ist ASSEMBLER, das hat keine Ahnung von Namespaces oder sowas
Das geht schon in richtig HLA (High-Level-Assembler), soviele lokale Vairablen braucht man in ASM-Code aber eigentlich auch nicht.
**
Achja, kann man ASM Dateien eigentlich in CPP Datein mit reinkompilieren und linken..
Wenn ja, hat das jemand schon mal in der Praxis gemacht**Jop, mien im Bau befindliches OS arbeitet damit. C compiliere ist mit gcc, ASM mit nasm und das ganze linke ich fröhlich zusammen mit ld. Klappt absolut bestens. Man muss primär drauf achten, dass (zumindest unter Windows) alle C-Funktionen in Assembler einen _ davorgesetzt bekommen und wenn man ausm Assembler was exportieren will, einen _ davorsetzen muss.
-
Ich wollte dich nochmal was fragen, vielleicht kennst dich ja damit aus
der ebp, gilt der NUR für die momentane Funktion, oder muss ich den auch ändern wenn ich die Klasse für die Funktion ändere..
Ich hab z.B. gemerkt das wenn ich programmiere und folgendes macheint a; __asm { mov eax,1h cpuid mov DWORD PTR[EBP-4],eax }
und später füge ich ein
int a;
int b; <-- neu
Dann wird b HINTER a gespeichert. Ist also EBP-8
Aber irgendwie ist das doch unlogisch.
Also kannst mir vielleicht die beiden Fragen beantworten?
Bitte bitte bitte
ein verzweifelter ASM Noobedit: Hab jetzt ein bisschen herumgespielt, und hab folgendes herausgefunden..
In meiner Klasse cCheckCPU sind 4 BasisVars mit insgesamt 592bit (charsarrays dabei etc...)
So, jetzt hab ich ne Funktion in der Klasse erstellt und wollte die ERSTE Variable ansprechen..
Dummerweise war niemand unter ebp-4 erreichbar OBWOHL ich nur diese EINE 32bit var deklariert habe.
Jetzt stellt sich die frage: Was liegt auf ebp-4
Und noch ne Frage, bedeutet z.B.: DWORD ebp-4 das man ebp-4 bis ebp-7 anspricht oder das man ebp-4 bis ebp-1 ansprich???
Danke im Voraus[ Dieser Beitrag wurde am 24.04.2003 um 10:42 Uhr von stealth00 editiert. ]