解决方案 »
- 如何让软件变得不那么山寨。。
- delphi 进制转换与相与问题
- 能不能单击“用Canvas动态画的线”,从而产生单击事件
- Hwnd和Handle的区别
- 散分!散分!散分!散分!
- 请问:junerr(路在何方)!
- delphi 内用ADOStoredProc 运行MS-SQL内的过程,只要MS-SQL时间长点,就没响应了
- 利用ClientDataSet对服务器段数据库操作?在线等待~!!~!
- 请教一些Delphi的基本问题(2)
- 今天趁人气旺,把昨天未解决的问题再提一遍:在选择StringGrid的一个Cell时,画出该Cell边框,如果选择的下一个Cell是相邻的,总会有一边画不出来,怎么回事啊?
- 代码里使用组合键Ctrl+V粘贴操作失败
- MouseMove 事件里如何得到鼠标移动到 DBGridEh 某行某列的值?
PSAPI;EnumProcessModules
动态加载的hook loadlibrary/ExA/ExW才能得到,静态的通过输入表加载的是由系统加载的,且不说系统未通过load系函数,系统加载的时候你都没能hook上,所以采用1楼的方法枚举吧。
这个是得系统进程的吧?
我是要列当前程序加载的DLL列表
这样你Hook这函数就没用咯
.
是你自己程序的话,想加载哪个就加载哪个,别人程序你注入了的话,HOOK LoadLibraryXX之流能替换掉一部分,还有就是你把人家dll改名,比如人家原来叫a.dll,你改成b.dll,自己写个托管dll叫a.dll导出原来a.dll中的所有函数,然后加载b.dll,这个我之前搞过一个现成工具,可供参考。http://www.unpack.cn/thread-28272-1-1.html
软件默认是调用c:\windows\system32下的dll
我就想让我的程序调用当前目录下的相同dll
#include <tchar.h>
#include <stdio.h>
#include <psapi.h>void PrintModules( DWORD processID )
{
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i; // Print the process identifier. printf( "\nProcess ID: %u\n", processID ); // Get a list of all the modules in this process. hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
if (NULL == hProcess)
return; if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
{
TCHAR szModName[MAX_PATH]; // Get the full path to the module's file. if ( GetModuleFileNameEx(hProcess, hMods[i], szModName,
sizeof(szModName)/sizeof(TCHAR)))
{
// Print the module name and handle value. _tprintf(TEXT("\t%s (0x%08X)\n"),
szModName, hMods[i]);
}
}
} CloseHandle( hProcess );
}
var
i: integer;
hModule: array[0..1024] of DWORD;
cb: Cardinal;
FileName: array[0..MAX_PATH] of char;
begin
Memo1.Clear;
if EnumProcessModules(GetCurrentProcess(), @hModule, sizeof(hModule), cb) then
begin
for i := 0 to Math.Floor(cb / sizeof(DWORD)) do
begin
GetModuleFileName(hModule[i], @FileName, sizeof(FileName));
Memo1.Lines.Add(FileName);
end;
end;
end;