Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.03.2009, 17:15 Titel: leidige dlls ... |
|
|
mal eine frage zu dlls (unter win) bzw libs(unter linux):
wenn man eine funktion exportieren möchte, also eine funktion innerhalb einer library einer anderen anwendung zur verfügung stellen möchte übergibt man bei der funktionsdefinition ein "alias".
Über diesen funktions-alias wird diese funktion dann "exportiert"..
jetzt meine frage: Kann man von FB aus abfragen, welche funktionen (bzw deren alias) eine library zur verfügung stellt?
Ideal wäre natürlich, wenn ich eine x-beliebige library so laden könnte, das egal welche funktionen dort zum export angeboten würden, ich eine liste von ihnen bekäme und sie per "eingabeaufforderung" benutzen könnte.
Klar, schwierig wird es bei den parametern. Beim export werden keine informationen darüber mitgegeben werden welche und wieviele datentypen als parameter erwartet werden. aber das soll mal meine sorge sein  |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 09.03.2009, 17:31 Titel: |
|
|
Also ich benutze für sowas den FileAlyzer, der zeigt dir unter anderem die Import-/Exporttabellen an. Das Programm gibts auf der Seite von Spybot SD. Eigentlich kann man die DLL auch mit Notepad öffnen, irgendwo da stehen auch die Funktionen, aber mit FileAlyzer gehts halt schneller. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.03.2009, 17:56 Titel: |
|
|
Das es spezielle Programme gibt, die sowas auslesen können, hatte ich mal gelesen. Aber mein programm soll es ja zur laufzeit selbst auslesen können.. ich hab mit notepad noch nicht reingeschaut, aber wenn das im "klartext" drinnen steht, wird man das doch bestimmt auch mit fb zur laufzeit lesen können oder? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 09.03.2009, 19:06 Titel: |
|
|
Die Frage ist, ob du auch zu Laufzeit "etwas damit anfangen" kannst. Immerhin will das Programm ja schon beim Compilieren wissen, welche SUBs und FUNCTIONs es deklarieren soll. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.03.2009, 22:39 Titel: |
|
|
@nemored: ?!? ... wenn ich eine dll einbinde ist dem compiler das ziemlich egal... schließlich gibts "funktions-zeiger" welche auf die funktionen in einer dll zeigen. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 09.03.2009, 22:50 Titel: |
|
|
Dann ok; ich kenne bisher nur die Methode über die Deklaration mittels .bi-Datei.
Zeig doch mal so eine dll mit einem Hex-Editor oder so an, welche Struktur dahintersteckt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.03.2009, 23:10 Titel: |
|
|
@sebastian: hm.. ja, ich glaub von der art gibt es einige programme.. aber ich brauche etwas was ich in mein fb-programm einbauen kann. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 10.03.2009, 09:43 Titel: |
|
|
@sebastian: Ok, damit kann ich leider nicht viel anfangen weil ich dort nicht registriert bin. Ich denke auch nicht das ich das dort machen werde weil mir das irgendwie zu kostenpflichtig riecht...
@Volta: Die VB-Methode scheidet aus wegen meiner erzielten plattformunabhängigkeit.
Durch den Delphi-Code muss ich mich erstmal durchgraben ob man den überhaupt so ohne weiteres auf fb übersetzen/übertragen kann.
Am idealsten wäre es, wenn man die dll binär öffnet und dort dann die stellen explizit ausliest, wo welche funktionen exportiert werden. Nur da die positionen der übergebenen Funktionen immer von datei zu datei variirt wird man da noch ein wenig logik reinstecken müssen.. und wie die aussehen soll.. pff... öhmm... ja? |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 10.03.2009, 10:34 Titel: |
|
|
Wenn du dir sozusagen deinen eigenen DLL-Viewer schreiben willst:
http://win32assembly.online.fr/pe-tut7.html
PE und DLL's haben den gleichen Aufbau, nur dass bei PE's die Exporttabelle in der Regel nicht abgefragt wird.
Hast aber ein Stück Arbeit vor dir...
Lösungen, die ich in der Regel vorziehe: Ich schau, dass ich eine Lib oder Kommandozeilenprogramm finde, das mir die Arbeit abnimmt. Im letzteren Fall lese ich dann nur den Output wieder ein.
VG!
Croco |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 10.03.2009, 15:54 Titel: |
|
|
Hi,
Danke Croco, der Link hat mir sehr geholfen.
Hier die Portierung des Delphi-Code in FB (nur win32):
Code: | #Include Once "windows.bi"
#Include Once "win\imagehlp.bi"
Dim FILENAME As ZString Ptr = @"shell32"
Dim path As ZString Ptr = null
Dim img As LOADED_IMAGE
Dim ExpD As PIMAGE_EXPORT_DIRECTORY
Dim pDummy As PIMAGE_SECTION_HEADER
Dim As Integer i, dirsize, is_dll=1, is_exe=0, ReadOnly=1
Dim pNameRVAs As Integer Ptr
Dim Namen As ZString Ptr
If MapAndLoad(FILENAME, path, @img, is_dll, ReadOnly) Then
ExpD = ImageDirectoryEntryToData(img.MappedAddress,0, IMAGE_DIRECTORY_ENTRY_EXPORT, @dirsize)
If ExpD Then
pNameRVAs = ImageRvaToVa(img.FileHeader, img.MappedAddress, Cast(UInteger,ExpD->AddressOfNames), @pDummy)
For i = 0 To ExpD->NumberOfNames - 1
Namen = ImageRvaToVa(img.FileHeader, img.MappedAddress, pNameRVAs[i], @pDummy)
Print i;" ";*Namen
Next
Print
End If
UnMapAndLoad(@img)
Else
Print "file not found"
End If
Sleep |
EDIT/
kleinen Fehler berichtigt! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 10.03.2009, 18:59, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.03.2009, 15:57 Titel: |
|
|
Zitat: | @sebastian: Ok, damit kann ich leider nicht viel anfangen weil ich dort nicht registriert bin. Ich denke auch nicht das ich das dort machen werde weil mir das irgendwie zu kostenpflichtig riecht... |
man kann die lösungen sehen, wenn man über einen google-referrer reinkommt.
so geht's... (ganz unten) _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 10.03.2009, 16:08 Titel: |
|
|
@volta: Schaut gut aus, nur leider. .. ich brauchs plattformunabhägig :-/ |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 10.03.2009, 16:25 Titel: |
|
|
@volta: allerdings, wenn ich das programm auf die shell32.dll los lasse:
Code: |
Z:\Eigene Dateien\fb>mapload shell32.dll
Activate_RunDLL
CallCPLEntry16
Control_FillCache_RunDLL
Control_RunDLLA
DAD_DragEnterEx
DAD_SetDragImage
DllGetVersion
DoEnvironmentSubstA
DragQueryFile
DragQueryPoint
ExtractAssociatedIconExA
ExtractIconEx
ExtractIconResInfoW
FindExecutableA
ILAppendID
ILCreateFromPath
ILFindLastID
ILIsEqual
ILSaveToStream
IsLFNDriveA
OpenAs_RunDLL
Options_RunDLL
PathGetShortPath
PathMakeUniqueName
PathYetAnotherMakeUniqueName
PifMgr_OpenProperties
PrintersGetCommand_RunDLLW
RealShellExecuteExA
RestartDialog
SHAlloc
SHBrowseForFolder
SHChangeNotification_Lock
SHChangeNotifyRegister
SHCreateDirectory
SHCreateLocalServerRunDll
SHCreateShellFolderView
SHDefExtractIconA
SHEmptyRecycleBinA
SHExtractIconsW
SHFindFiles
SHFormatDrive
SHGetAttributesFromDataObject
SHGetDiskFreeSpaceA
SHGetFileInfoA
SHGetFolderPathAndSubDirA
SHGetIconOverlayIndexW
SHGetNewLinkInfo
SHGetPathFromIDListA
SHGetSetSettings
SHGetSpecialFolderPathA
SHHelpShortcuts_RunDLL
SHInvokePrinterCommandA
SHLoadInProc
SHMapIDListToImageListIndexAsync
SHOpenFolderAndSelectItems
SHPathPrepareForWriteW
SHQueryRecycleBinA
SHRunControlPanel
SHShellFolderView_Message
SHUnlockShared
SHValidateUNC
SheChangeDirW
SheGetCurDrive
SheGetPathOffsetW
SheShortenPathA
ShellExec_RunDLL
ShellExecuteEx
ShellHookProc
Shell_GetImageLists
Shell_NotifyIconW
StrChrIW
StrCmpNIW
StrNCmpA
StrNCpyA
StrRChrIW
StrRStrIW
StrStrIW
WriteCabinetState
"""""""""""çwwçä"""""""""""(êwxxG""""""""""""êççêB""""""""""""(êxtr"""""""""""""
êçH""""""""""""""(êé"" ? ³☼ ♥ └
̙
üß
p
╚øàõ
╠¡çP¤░è;
ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ ÏÛ´ íL!
┼;▼♂t;▲♀+
■¹
♥
8Uý)#8ñ
ƒƒ ░░░ þþþ ¶Ô╦ ÀZ ÁT Ø♀ ƒ↕ ú▲ ®. ¼9 ░D ÀZ ÀZ ÀZ ÀZ ÀZ ÀZ ÀZ §▓Z │
⌂a Öff ╠░░ ‗ßß ´´ ÚÚ ÕÕ ßß ██ ÍÍ ÊÊ ╠╠ ¨┼┼ ╠òò ƒkk ~TT«
ÖÖ
Z:\Eigene Dateien\fb>
|
PS: hab das programm ein wenig modifizert damit es die dll als parameter entgegennimmt:
Code: |
#INCLUDE ONCE "windows.bi"
#INCLUDE ONCE "win\imagehlp.bi"
DIM img AS LOADED_IMAGE
DIM ExpD AS PIMAGE_EXPORT_DIRECTORY
DIM pDummy AS PIMAGE_SECTION_HEADER
DIM AS INTEGER i, dirsize
DIM pNameRVAs AS INTEGER PTR
DIM Namen AS ZSTRING PTR
dim fname0 as string = command
dim fname1 as zstring ptr = strptr(fname0)
dim d0 as string = curdir
dim d1 as zstring ptr = strptr(d0)
IF MapAndLoad(fname1, d1, @img, 1, 1) THEN
ExpD = ImageDirectoryEntryToData(img.MappedAddress,0, IMAGE_DIRECTORY_ENTRY_EXPORT, @dirsize)
IF (ExpD <> 0) THEN
pNameRVAs = ImageRvaToVa(img.FileHeader, img.MappedAddress, CAST(UINTEGER,ExpD->AddressOfNames), @pDummy)
FOR i = 0 TO ExpD->NumberOfNames - 1
Namen = ImageRvaToVa(img.FileHeader, img.MappedAddress, pNameRVAs[i*4], @pDummy)
IF Namen<>0 THEN PRINT *Namen
NEXT
END IF
UnMapAndLoad(@img)
ELSE
PRINT "file NOT found"
END IF
|
|
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 10.03.2009, 18:45 Titel: |
|
|
@MOD:
Dann bleibt dir eigentlich nichts weiter übrig als das PE-Format selbst zu zerlegen, dich zur Export-Table durchzuhangeln und diese zu interpretieren. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 10.03.2009, 19:15 Titel: |
|
|
Deswegen benutz ich auch den FileAlyzer  |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 10.03.2009, 21:31 Titel: |
|
|
Oh, Entschuldigung. Eigtl. wollt ich OneCypher ansprechen, bzgl. seiner Aussage
OneCypher hat Folgendes geschrieben: |
ich brauchs plattformunabhägig :-/
|
 _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
|