Pfad der Binary
- vonTurnundTaxis
- Beiträge: 2130
- Registriert: 06.10.2004 20:38
- Wohnort: Bayreuth
- Kontaktdaten:
Pfad der Binary
Wie kann man (unter Linux) den Pfad seiner Binary ermitteln?
- vonTurnundTaxis
- Beiträge: 2130
- Registriert: 06.10.2004 20:38
- Wohnort: Bayreuth
- Kontaktdaten:
/proc/self/exe bzw. /proc/(prozessid)/exe ist ein symbolischer Link auf das Programm.
Ich hab dazu ein Programm geschrieben, hab aber gerade kein Linux mit PB um es zu testen.
(Vielleicht ist PB auch nicht so glücklich, wenn ich einfach irgendwelche Register verändere)
Ich hab dazu ein Programm geschrieben, hab aber gerade kein Linux mit PB um es zu testen.
Code: Alles auswählen
mem=AllocateMemory(1024)
b.s="/proc/self/exe"
c.l=@b
!mov eax,85 ;int sys_readlink(const char * path, char * buf, int bufsiz)
!mov ebx,[v_c]
!mov ecx,[v_mem]
!mov edx,1024
!int 0x80
MessageRequester("",GetPathPart(PeekS(mem)))
Zuletzt geändert von Eric am 11.04.2006 16:58, insgesamt 1-mal geändert.
Ich habe nochmal kurz rum gekrammt und einen etwas ältern Source
gefunden:
Macht das gleiche wie Erics Code aber benutzt dazu die libc und
funktioniert auf Windows und Linux.
gefunden:
Code: Alles auswählen
Procedure.s GetAppDir()
Protected lBuffer.l, lLen.l
Protected sOut.s
lBuffer = AllocateMemory(2048+1)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
GetModuleFileName_(#Null, lBuffer, #MAX_PATH)
sOut = GetPathPart(PeekS(lBuffer))
If Right(sOut, 1) <> "\": sOut + "\": EndIf
CompilerCase #PB_OS_Linux
lLen = Readlink_("/proc/" + Str(getpid_()) + "/exe", lBuffer, 2048)
sOut = GetPathPart(PeekS(lBuffer, lLen))
CompilerEndSelect
FreeMemory(lBuffer)
ProcedureReturn sOut
EndProcedure
Procedure.s GetAppName()
Protected lBuffer.l, lLen.l
Protected sOut.s
lBuffer = AllocateMemory(2048+1)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
GetModuleFileName_(#Null, lBuffer, 2048)
sOut = GetFilePart(PeekS(lBuffer))
CompilerCase #PB_OS_Linux
lLen = Readlink_("/proc/" + Str(getpid_()) + "/exe", lBuffer, 2048)
sOut = GetFilePart(PeekS(lBuffer, lLen))
CompilerEndSelect
FreeMemory(lBuffer)
ProcedureReturn sOut
EndProcedure
funktioniert auf Windows und Linux.