Compiler, Constante & Co..?
Übersicht

#ReaperNewsposterBetreff: Compiler, Constante & Co..? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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.. ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Jetzt bleibt nurnoch MaxIDE und die MultiThreads offen ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group