Compiler, Constante & Co..?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

#Reaper

Newsposter

Betreff: Compiler, Constante & Co..?

BeitragSa, Okt 20, 2007 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit ich bislang wuste, werden Constante doch immer beim Compilen direkt ersetzt, so dass es die Variable in der Binary nicht mehr existiert, oder?
Aber nun habe ich mir mal eben eine .exe angeschaut, und festgestellt, dass das nicht so ganz stimmen kann...
Die ganzen Variablennamen der Constanten findet man in der Exe, dahinter auch deren Inhalt, wo allerdings dann doch constante Variablen ersetzt wurden..
An anderen Stellen werden dann allerdings auch die Constanten ersetzt. Wundert mich aber sehr, dass die überhaupt noch existieren.. :-/

Auch sieht man auch z.B. Funktionsnamen, oder Types etc. :-/
Somit ist ja auch BMax sehr anfällig gegenüber Manipulationen.. Confused


Und btw: Weiß einer, warum die MaxIDE 6 Threads benutzt, obwohl die doch in BMax garnicht gehen..? o_O
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
 

ChristianK

BeitragSa, Okt 20, 2007 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir gerade ein kleines Programm mit Funktionen und Konstanten geschrieben. Die Namen sind jedenfalls nicht in der .exe drin. Vielleicht hast du einfach den Debug-Modus eingeschaltet. Der Debugger könnte die Namen nämlich brauchen ...

Wie meinst du das mit den Threads?
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

#Reaper

Newsposter

BeitragSa, Okt 20, 2007 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, war ohne Debug-Modus.
Oder könnte es eventuell daran liegen, dass die Constanten in einem Type liegen? :-/

Mit Threads meinte ich das Multithreading, was ja momentan in BMax (leider) nicht wirklich funktioniert.
Im Taskmanager kann man sich ja die Threadanzahl auflisten lassen. (Ansicht->Spalten auswählen)
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Vertex

BeitragSa, Okt 20, 2007 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Verfolge es doch einfach zurück!
Code: [AUSKLAPPEN]
SuperStrict

Framework BRL.Blitz

Const GLOBAL_TEST : Int = $112233

Type TBlub
   Const TYPE_TEST : Int = $AABBCC

   Function Foo()
      Const LOCAL_TEST : Int = $DDEEFF
   End Function
End Type


->

Code: [AUSKLAPPEN]
format   MS COFF
   extrn   ___bb_blitz_blitz
   extrn   _bbObjectClass
   extrn   _bbObjectCompare
   extrn   _bbObjectCtor
   extrn   _bbObjectDtor
   extrn   _bbObjectFree
   extrn   _bbObjectRegisterType
   extrn   _bbObjectReserved
   extrn   _bbObjectSendMessage
   extrn   _bbObjectToString
   extrn   _bbStringClass
   public   __bb_TBlub_Delete
   public   __bb_TBlub_Foo
   public   __bb_TBlub_New
   public   __bb_main
   public   _bb_TBlub
   section   "code" code
__bb_main:
   push   ebp
   mov   ebp,esp
   cmp   dword [_20],0
   je   _21
   mov   eax,0
   mov   esp,ebp
   pop   ebp
   ret
_21:
   mov   dword [_20],1
   call   ___bb_blitz_blitz
   push   _bb_TBlub
   call   _bbObjectRegisterType
   add   esp,4
   mov   eax,0
_10:
   mov   esp,ebp
   pop   ebp
   ret
__bb_TBlub_New:
   push   ebp
   mov   ebp,esp
   push   ebx
   mov   ebx,dword [ebp+8]
   push   ebx
   call   _bbObjectCtor
   add   esp,4
   mov   dword [ebx],_bb_TBlub
   mov   eax,0
_13:
   pop   ebx
   mov   esp,ebp
   pop   ebp
   ret
__bb_TBlub_Delete:
   push   ebp
   mov   ebp,esp
   mov   eax,dword [ebp+8]
_16:
   mov   dword [eax],_bbObjectClass
   push   eax
   call   _bbObjectDtor
   add   esp,4
   mov   eax,0
_22:
   mov   esp,ebp
   pop   ebp
   ret
__bb_TBlub_Foo:
   push   ebp
   mov   ebp,esp
   mov   eax,0
_18:
   mov   esp,ebp
   pop   ebp
   ret
   section   "data" data writeable align 8
   align   4
_20:
   dd   0
_2:
   db   "TBlub",0
_3:
   db   "TYPE_TEST",0
_4:
   db   "i",0
   align   4
_5:
   dd   _bbStringClass
   dd   2147483647
   dd   8
   dw   49,49,49,56,57,49,57,54
_6:
   db   "New",0
_7:
   db   "()i",0
_8:
   db   "Delete",0
_9:
   db   "Foo",0
   align   4
_1:
   dd   2
   dd   _2
   dd   1
   dd   _3
   dd   _4
   dd   _5
   dd   6
   dd   _6
   dd   _7
   dd   16
   dd   6
   dd   _8
   dd   _7
   dd   20
   dd   7
   dd   _9
   dd   _7
   dd   48
   dd   0
   align   4
_bb_TBlub:
   dd   _bbObjectClass
   dd   _bbObjectFree
   dd   _1
   dd   8
   dd   __bb_TBlub_New
   dd   __bb_TBlub_Delete
   dd   _bbObjectToString
   dd   _bbObjectCompare
   dd   _bbObjectSendMessage
   dd   _bbObjectReserved
   dd   _bbObjectReserved
   dd   _bbObjectReserved
   dd   __bb_TBlub_Foo


Und wenn ich mir dann die Objekt Datei daraus anschaue, stelle ich fest, dass die Namen für TBlub und TBlub.Foo erhalten bleiben. Das Reflectionfeature von BMax macht das ja auch notwendig. Man kann ja zur Laufzeit auf diese Namen zugreifen.

Die globale Konstante GLOBAL_TEST und die lokale Konstante LOCAL_TEST finde ich durch einfaches Suchen in der .o Datei nicht hingegen aber die statische Konstante TYPE_TEST.

Dass TYPE_TEST komplett leserlich ist verwundert mich. Siehe dazu im Assemblercode das Label _3 an. Im Label _1 wird anscheinend alles an Daten zusammengefügt, das zum Type TBlub gehört.

mfg olli
vertex.dreamfall.at | GitHub
 

#Reaper

Newsposter

BeitragSa, Okt 20, 2007 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, hab von Assembler nicht viel Ahnung. Hatte auch total vergessen, dass seit neustem ja nun Reflection unterstützt wird. Somit erklärt sich das ja schonmal von selbst.
Danke für die Erklärung Smile

Jetzt bleibt nurnoch MaxIDE und die MultiThreads offen Wink
 

Dreamora

BeitragSa, Okt 20, 2007 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
BM hat keine multiplen Threads.
Was es jedoch macht ist die gestartete anwendung via CreateProcess zu starten weswegen es multi process wird da die IDE ja der Parent Process der ausgeführten Anwendung ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group