Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
LoadLibrary返回的是在内存的首地址吗。?我想释放一个资源文件里的DLL,从资源文件里读取DLL到一个字节数组,能不能直接在内存里执行API.不想保存到硬盘让人发现。
LoadLibrary返回的是在内存的首地址吗。?我想释放一个资源文件里的DLL,从资源文件里读取DLL到一个字节数组,能不能直接在内存里执行API.不想保存到硬盘让人发现。
http://blog.csdn.net/SupermanKing/archive/2008/09/28/2992218.aspx
需要用 GetModuleAddress 获得地址。
Create a new project and add this code to Form1
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Sub Form_Load()
On Error Resume Next
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: [email protected]
'We're going to call an API-function, without declaring it!
Dim lb As Long, pa As Long
'map 'user32' into the address space of the calling process.
lb = LoadLibrary("user32")
'retrieve the address of 'SetWindowTextA'
pa = GetProcAddress(lb, "SetWindowTextA")
'Call the SetWindowTextA-function
CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
'unmap the library's address
FreeLibrary lb
End Sub
Handle 是 LONG是什么?
nSize As Long
lpData As Long
End TypePublic Type MPBarrett
nSize As Long
lpModl As Long
lpMu As Long
End TypePublic Declare Function RSAEncrypt Lib "beecrypt.dll" Alias "_rsapub@16" (n As MPBarrett, e As MPNumber, tData As MPNumber, tDataRet As MPNumber) As Long这个DLL都是传的自定义结构。
是
pe文件必须初始化后才能正确调用,否则无法正确执行的;但目前除了纯手动实现加载dll外,没有系统方法提供这个方便,如果想实现纯动态加载dll,去看雪找找这样的代码吧,不过意义不是很大
你有一个支持 API 的 DLL 文件,然后将其放到VB的二进制资源里。
你想在不用将 DLL 文件数据转储到磁盘的情况下,想通过内存数组的方式
读出 DLL 文件数据,并想直接以这个字节数组为契机,执行里面的函数。
如果是这样,据我所知,应该没有直接的API支持(可能是我的功力不够也不一定)。
但以我了解的API函数来说,应该是没有的。如果要做这样的事情,可以考虑从另外
一个方向入手,就是虚拟文件路径,比如你讲你内存的数据通过一个驱动接口虚拟成
一个文件地址,让LoadLibrary去读这个虚拟路径,然后驱动程序返回你给定的内容
给他,这样一来问题就解决了,不过这种方向要涉及驱动和相关的API开发。不是单纯
用 VB 就能实现的功能。
推荐楼主看看下面文章:http://topic.csdn.net/u/20110228/13/7f6ec8f7-0ce3-4bf2-9abe-708171191a9c.html