Funktion um die Funktionen einer DLL aufzulisten

  • Hab mal schnell eine Funktion gebastelt, die die Funktionen einer DLL als Array oder als String zurückgibt. Das ganze ist nicht ganz bugfrei und ohne Fehlerbehandlung. Außerdem funktioniert es wahrscheinlich nur bei 32Bit DLL's.

    Vllt findet es der eine oder andere ganz nützlich, dann könnte ich bestimmt noch ein bischen Zeit opfern um es zu verbessern.

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $DLLFile = FileOpenDialog("Choose DLL file", @SystemDir, "DLL files (*.dll)", 3)
    if @error Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    $aNames = _DLLGetFunctionNames($DLLFile)
    If @error Then Exit ConsoleWrite($DLLFile & ": Fault " & @error & @CR)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $sNames = _DLLGetFunctionNames($DLLFile, 1)
    ;~ ConsoleWrite($sNames & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aNames, StringTrimLeft($DLLFile, StringInStr($DLLFile, "\", 0, -1)))

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _DLLGetFunctionNames($sFileName, $ParamResult = 0)
    ;funkey Aug, 12th, 2010
    ;$ParamOutput: 0 --> Result is array
    ; 1 --> Result is string
    Local $hFile = FileOpen($sFileName, 0)
    If $hFile = -1 Then Return SetError(1) ; file error
    Local $sFile = FileRead($hFile)
    FileClose($hFile)
    Local $iStartPos, $iEndPos, $sFunctionNames, $aFunctionNames
    Local $DLLName = StringTrimLeft($sFileName, StringInStr($sFileName, "\", 0, -1))
    For $i = 1 To 99
    $iStartPos = StringInStr($sFile, $DLLName & Chr(0), 0, -$i)
    If $iStartPos = 0 Then Return SetError(2) ;search error
    $sFunctionNames = StringTrimLeft($sFile, $iStartPos - 2)
    $sFunctionNames = StringTrimLeft($sFunctionNames, StringInStr($sFunctionNames, "dll") + 3)
    $iEndPos = StringInStr($sFunctionNames, Chr(0) & Chr(0))
    $sFunctionNames = StringLeft($sFunctionNames, $iEndPos - 1)
    If StringInStr($sFunctionNames, Chr(0) & Chr(0x90)) Then $sFunctionNames = StringLeft($sFunctionNames, StringInStr($sFunctionNames, Chr(0) & Chr(0x90)) - 1)
    $aFunctionNames = StringSplit($sFunctionNames, Chr(0), 2)
    If UBound($aFunctionNames) > 0 And StringStripWS($aFunctionNames[0], 8) <> "" Then ExitLoop
    Next
    Switch $ParamResult
    Case 0
    Return $aFunctionNames
    Case 1
    Return StringReplace($sFunctionNames, Chr(0), @CRLF)
    EndSwitch
    EndFunc

    [/autoit]
  • Sehr gut gelungen.
    Es ist bestimmt ganz nützlich, wenn man eine DLL benutzen will und die Funktionen nicht kennt.
    Ich weiß nicht ob du es kannst oder ob es möglich ist, aber vllt. könntest du auch die benötigten Parameter auslesen.
    Dann wäre das Skript perfekt.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Ich schiesse gleich mit Kanonen auf Spatzen, dann ist man sicher, dass die keine weiteren Geheimnisse mehr haben ==> IDA Pro, damit fällt es auch relativ leicht, wenigstens an die Anzahl und Art der Parameter zu kommen.