LoadLibrary是以二进制读取到内存吗。

wo22ni 2011-05-03 05:40:59
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long


LoadLibrary返回的是在内存的首地址吗。?

我想释放一个资源文件里的DLL,从资源文件里读取DLL到一个字节数组,能不能直接在内存里执行API.不想保存到硬盘让人发现。
...全文
209 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2011-05-03
  • 打赏
  • 举报
回复
楼主对动态链接库的运行机制还不太清楚。当然,也许是想创新!
推荐楼主看看下面文章:http://topic.csdn.net/u/20110228/13/7f6ec8f7-0ce3-4bf2-9abe-708171191a9c.html
wo22ni 2011-05-03
  • 打赏
  • 举报
回复
谢谢。。。。
现在还是人类 2011-05-03
  • 打赏
  • 举报
回复
不知道是不是我理解错了,估计你的情况是这样:
你有一个支持 API 的 DLL 文件,然后将其放到VB的二进制资源里。
你想在不用将 DLL 文件数据转储到磁盘的情况下,想通过内存数组的方式
读出 DLL 文件数据,并想直接以这个字节数组为契机,执行里面的函数。
如果是这样,据我所知,应该没有直接的API支持(可能是我的功力不够也不一定)。
但以我了解的API函数来说,应该是没有的。如果要做这样的事情,可以考虑从另外
一个方向入手,就是虚拟文件路径,比如你讲你内存的数据通过一个驱动接口虚拟成
一个文件地址,让LoadLibrary去读这个虚拟路径,然后驱动程序返回你给定的内容
给他,这样一来问题就解决了,不过这种方向要涉及驱动和相关的API开发。不是单纯
用 VB 就能实现的功能。
PctGL 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 wo22ni 的回复:]
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long


LoadLibrary返回的是在内存的首地址吗。?

我想释放一个资源文件里的DLL,从资源文件里读取DLL到一个字节数组,能不能直接在内存里执行API.不想保……
[/Quote]

是。。。
pe文件必须初始化后才能正确调用,否则无法正确执行的;但目前除了纯手动实现加载dll外,没有系统方法提供这个方便,如果想实现纯动态加载dll,去看雪找找这样的代码吧,不过意义不是很大。。。
wo22ni 2011-05-03
  • 打赏
  • 举报
回复
Public Type MPNumber
nSize As Long
lpData As Long
End Type

Public Type MPBarrett
nSize As Long
lpModl As Long
lpMu As Long
End Type

Public Declare Function RSAEncrypt Lib "beecrypt.dll" Alias "_rsapub@16" (n As MPBarrett, e As MPNumber, tData As MPNumber, tDataRet As MPNumber) As Long

这个DLL都是传的自定义结构。
wo22ni 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 supermanking 的回复:]
引用 8 楼 wo22ni 的回复:
代码是不是被过滤掉什么了,一运行,直接弹出内存不能为****
看看我1楼给你的链接吧。
[/Quote]

在看,功力不够。谢谢。
现在还是人类 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wo22ni 的回复:]
代码是不是被过滤掉什么了,一运行,直接弹出内存不能为****[/Quote]
看看我1楼给你的链接吧。
wo22ni 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 veron_04 的回复:]
需要滤掉
[/Quote]

你直接复制你的代码去运行一下,看是什么被滤掉了。
贝隆 2011-05-03
  • 打赏
  • 举报
回复
需要滤掉
wo22ni 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 veron_04 的回复:]
VB code
'Example Name:Call Procedure
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……
[/Quote]

代码是不是被过滤掉什么了,一运行,直接弹出内存不能为****
Lactoferrin 2011-05-03
  • 打赏
  • 举报
回复
LoadLibrary 返回的就是地址,win32api中没有GetModuleAddress这个东西
东方之珠 2011-05-03
  • 打赏
  • 举报
回复
可以动态调用API,这里就有一个(超级神豆的):http://topic.csdn.net/u/20110329/10/78f7baa9-d526-4a6f-8e23-6141d9bb76d3.html
wo22ni 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 caozhy 的回复:]
不是,返回的是 Handle
需要用 GetModuleAddress 获得地址。
[/Quote]

Handle 是 LONG

是什么?
贝隆 2011-05-03
  • 打赏
  • 举报
回复
'Example Name:Call Procedure
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: KPDTeam@Allapi.net
'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

threenewbee 2011-05-03
  • 打赏
  • 举报
回复
不是,返回的是 Handle
需要用 GetModuleAddress 获得地址。
dbcontrols 2011-05-03
  • 打赏
  • 举报
回复
现在还是人类 2011-05-03
  • 打赏
  • 举报
回复
你看看我的博客,可能对你有帮助
http://blog.csdn.net/SupermanKing/archive/2008/09/28/2992218.aspx

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧