Sub Main()
Dim sLib$, sFunc$
Dim sCmdLine$
Dim hLib&
Dim lProcAddr&
Dim sMsg$
'Obtiene la linea de comandos.
'
sCmdLine = Command$
If sCmdLine Like vbNullString Then
sMsg = "Debes ingresar la librería y el nombre de la función:" & vbCrLf & vbCrLf & _
"USO: FndOffset librería función"
Call MsgBox(sMsg)
Exit Sub
End If
'Obtiene los argumentos desde la linea de comandos.
'
sLib = RTrim$(Left$(sCmdLine, InStr(1, sCmdLine, " ")))
sFunc = Trim$(Mid$(sCmdLine, InStr(1, sCmdLine, " ")))
'Carga la librería en memoria y devuelve
'la dirección en donde se cargó.
'
hLib = LoadLibrary(sLib)
If hLib Then
'Obtiene el offset relativo (RVA) de la función
'
lProcAddr = GetProcAddress(hLib, sFunc)
If lProcAddr Then
sMsg = "El offset de '" & sFunc & "' en '" & sLib & "' es 0x" & _
Hex$(lProcAddr) & " (" & lProcAddr & ")"
Call Clipboard.SetText(sMsg, vbCFText) 'Copia los datos al portapapeles.
Call MsgBox(sMsg, vbExclamation)
Call MsgBox("Los datos se copiaron al portapapeles.", vbInformation)
Else
Call MsgBox("No se encontró la función u ordinal '" & sFunc & "' en '" & sLib & "'", vbCritical)
End If
'Descarga la librearía de memoria.
'
Call FreeLibrary(hLib)
Else
Call MsgBox("No se pudo cargar la librería '" & sLib & "'", vbCritical)
End If
End Sub