エクスポートされている関数を列挙(VB)

説明:

kernel32.dllがエクスポートしている関数の一覧をテキストボックスに表示する。

キーワード:

ImageDirectoryEntryToData

サンプルコード:

'宣言
Declare Function MoveMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByRef Dest As Any, _
    ByRef Src As Any, _
    ByVal Size As Long) As Long

Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyA" ( _
    ByVal DestStr As String, _
    ByVal pSrc As Any) As Long

'コード
Private Sub Command1_Click()
    Dim Size As Long
    Dim BaseAddress As Long
    Dim pExportDirectory As Long
    Dim ExportDirectory As IMAGE_EXPORT_DIRECTORY
    Dim ExportNamePointerTable() As Long
    Dim S As String
    Dim FuncName As String * 1000
    Dim I As Long
    
    'kernel32.dllのベースアドレスを取得
    BaseAddress = GetModuleHandle("kernel32.dll")
    
    'エクスポートディレクトリを取得
    pExportDirectory = ImageDirectoryEntryToData(BaseAddress, 1, IMAGE_DIRECTORY_ENTRY_EXPORT, Size)
    MoveMemory ExportDirectory, ByVal pExportDirectory, Len(ExportDirectory)
    
    'エクスポートされている関数の名前のリストを取得
    ReDim ExportNamePointerTable(ExportDirectory.NumberOfNames - 1)

    MoveMemory _
        ExportNamePointerTable(0), _
        ByVal (BaseAddress + ExportDirectory.AddressOfNames), _
        ExportDirectory.NumberOfNames * 4
    
    '各関数名を表示
    For I = 0 To ExportDirectory.NumberOfNames - 1
        PtrToStr FuncName, BaseAddress + ExportNamePointerTable(I)
        S = S & Left(FuncName, InStr(FuncName, vbNullChar) - 1) & vbCrLf
    Next
    
    Text1.Text = S
End Sub


(original text:2000/03/19 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。