Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

leidige dlls ...

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.03.2009, 17:15    Titel: leidige dlls ... Antworten mit Zitat

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 zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 09.03.2009, 17:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.03.2009, 17:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4703
Wohnort: ~/

BeitragVerfasst am: 09.03.2009, 19:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.03.2009, 22:39    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4703
Wohnort: ~/

BeitragVerfasst am: 09.03.2009, 22:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.03.2009, 22:53    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:
Das es spezielle Programme gibt, die sowas auslesen können, hatte ich mal gelesen.

http://www.dependencywalker.com/
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.03.2009, 23:10    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.03.2009, 23:34    Titel: Antworten mit Zitat

Wie wär's hiermit? http://www.experts-exchange.com/Programming/System/Windows__Programming/Q_10482559.html
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 10.03.2009, 02:07    Titel: Antworten mit Zitat

eine komplizierte Methode (in VB):
http://www.codeproject.com/KB/winsdk/vbdebugger.aspx

eine scheinbar einfachere Methode (in Delphi):
http://www.delphipraxis.net/post1000932.html#1000932
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 10.03.2009, 09:43    Titel: Antworten mit 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...

@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
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 10.03.2009, 10:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 10.03.2009, 15:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 10.03.2009, 15:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 10.03.2009, 16:08    Titel: Antworten mit Zitat

@volta: Schaut gut aus, nur leider. peinlich .. ich brauchs plattformunabhägig :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 10.03.2009, 16:25    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.03.2009, 18:45    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 10.03.2009, 19:15    Titel: Antworten mit Zitat

Deswegen benutz ich auch den FileAlyzer zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.03.2009, 21:31    Titel: Antworten mit Zitat

Oh, Entschuldigung. Eigtl. wollt ich OneCypher ansprechen, bzgl. seiner Aussage
OneCypher hat Folgendes geschrieben:

ich brauchs plattformunabhägig :-/

verlegen
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz