Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 03.10.2004, 20:57 Titel: Neue Erkenntnisse |
|
|
Hallo.
Jemand Schlaues aus einem ASM-Forum hat Folgendes geschrieben: | Gugst du ins PSP deines Programms (kannst zB. DOS-Funktion 62h benutzen, um die Segmentadresse zu bekommen); dort findest du beim Offset 002Ch die Segmentadresse zur naechsten Environment-Tabelle.
Die Environment-Tabelle gehst du bis zum Ende durch (Ende eines Eintrags wird durch ein Byte 00h gekennzeichnet. das Ende der Tabelle wird gekennzeichnet durch 2 aufeinanderfolgende 00h-Bytes).
Dort muessten dann 2Bytes mit den Werten 01h und 00h folgen.
Dahinter steht dann direkt ein 0terminierter String, der den Pfad+Dateinamen des gerade laufenden Programms enthaelt.
Die Environment koennte dann zB. so aussehen:
db "COMSPEC=C:\COMMAND.COM", 00h
db "WINDIR=C:\WINDOWS\", 00h
db 00h, 01h, 00h
db "C:\MeinPfad\MeinProgramm.exe", 00h |
Wie setze ich das in QB um? Vielleicht kann mir ja ein ASM Freak wie z.B. AK helfen?!
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Weazel
Anmeldungsdatum: 10.09.2004 Beiträge: 22
|
Verfasst am: 04.10.2004, 18:46 Titel: |
|
|
Guckst du QB-MonsterFAQ - wirst du fündig:
Code: |
FUNCTION EXENAME$
DIM MCODE(1 TO 4) AS LONG, OS AS INTEGER, BX AS INTEGER, DUMMY AS LONG
DEF SEG = VARSEG(MCODE(1))
OS = VARPTR(MCODE(1))
POKE OS, &H55 'PUSH BP
POKE OS + 1, &H89: POKE OS + 2, &HE5 'MOV BP,SP
POKE OS + 3, &HB4: POKE OS + 4, &H62 'MOV AH,62
POKE OS + 5, &HCD: POKE OS + 6, &H21 'INT 21
POKE OS + 7, &H8B: POKE OS + 8, &H7E: POKE OS + 9, 6'MOV DI,[BP+6]
POKE OS + 10, &H89: POKE OS + 11, &H1D 'MOV [DI],BX
POKE OS + 12, &H5D 'POP BP
POKE OS + 13, &HCA: POKE OS + 14, 2: POKE OS + 15, 0'RETF 2
CALL ABSOLUTE(BX, OS)
DEF SEG = BX
ENVSM = PEEK(&H2C) + 256 * PEEK(&H2D)
ENVOS = 0
DEF SEG = ENVSM
DUMMY = 0&
WHILE DUMMY <> 65536
DUMMY = PEEK(ENVOS) + 256& * (PEEK(ENVOS + 1) + 256& * (PEEK(ENVOS + 2) + 256& * PEEK(ENVOS + 3)))
ENVOS = ENVOS + 1
WEND
ENVOS = ENVOS + 3
N$ = ""
A = 1
WHILE A <> 0
A = PEEK(ENVOS)
IF A <> 0 THEN N$ = N$ + CHR$(A)
ENVOS = ENVOS + 1
WEND
DEF SEG
EXENAME$ = N$
END FUNCTION
|
Das hat bei mir wunderbar geklappt - natürlich gibt es "QB.EXE" zurück, wenn du es aus der Entwicklungsumgebung startest... |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.10.2004, 19:07 Titel: |
|
|
Mal ne blöde Frage: Wenn man ne Exe erstellt weiß man doch eh wie die dann heißt und kann das als Konstante hinschreiben, oder?
Wer benennt den Exe's um? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Weazel
Anmeldungsdatum: 10.09.2004 Beiträge: 22
|
Verfasst am: 04.10.2004, 19:10 Titel: |
|
|
Angenommen, du wölltest einen QB-Virus proggen, dann bräuchtest du das (ist eigentlich ganz simpel - möchte jemand einen Source?) |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 04.10.2004, 19:50 Titel: Hä? |
|
|
Hallo.
Danke für den Source, aber ich habe das in der MonsterFAQ nicht gefunden. Ich habe sie sogar auf meinem Desktop.
Gefunden habe ich, wie man das Verzeichnis ausliest usw, aber wo steht denn da deine FUNCTION, Weazel???
Oder vielleicht habe ich eine veraltete Version der MonsterFAQ? - *ganzunsichersei*
Wenn die FUNCTION drinsteht - Sorry, hab ich echt übersehen... Und ich dachte immer, zu wissen, welche Themen in der MonsterFAQ zu finden sind.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Weazel
Anmeldungsdatum: 10.09.2004 Beiträge: 22
|
Verfasst am: 04.10.2004, 20:26 Titel: |
|
|
Also, eigentlich nicht so schwer zu finden:
QbMonsterFAQ
->
"Dateien, Verzeichnisse und Laufwerke bearbeiten"
->
"Wie erkennt mein BAS-Programm sein eigenes Verzeichnis?"
->
Antwort 2 |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Weazel
Anmeldungsdatum: 10.09.2004 Beiträge: 22
|
Verfasst am: 04.10.2004, 22:05 Titel: |
|
|
Eine Frage:
Was genau willst du eigentlich mit der Funktion anstellen, die den EXE-Dateinamen liefert? Wozu brauchst du das in deinem Programm/Spiel/WasAuchImmer? |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 05.10.2004, 12:37 Titel: Dateinamen erkennen |
|
|
Hallo.
Das brauche ich für ein Programm, das nach dem PropertyBag Prinzip arbeiten soll. Es öffnet sich selbst (seinen eigenen Dateinamen!) und liest Informationen wie z.B. eine Highscore-Liste aus.
Wird die EXE umbennant, würde das nicht mehr gehen. Deshalb muss das Programm seinen Dateinamen erkennen.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 05.10.2004, 12:50 Titel: |
|
|
Ist doch Klasse wenn das dann nicht mehr geht, dann kann dir keiner das Progamm klauen und unter anderem Namen veröffentlichen.
Wer bennent schon ne exe um? Macht doch keiner... _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
|