VC中遍历目标进程中的模块


VC中遍历目标进程中的模块 MFC代码win32 也可以用 在下面代码进行修改转换就可以了CString strModule; 可以换成 char* 但是MODULEENTRY32结构中的szModule是WCHAR 由于博主基础知识较差 所以使用的MFC里的Cstring函数
#include <Tlhelp32.h>

/***************************************************/
/*  函数: 查找目标进程中是否有指定模块信息
/*  参数:DWORD 目标进程ID
/*  参数:char* 指定模块名称 例如"ntdll.dll"
/*	返回: 无
/*  创建人:			日期		内容
/*	金胖胖		2015年2月25日	新建
/***************************************************/
bool CUIConsoleDlg::GetAllModules(DWORD dWProcessId,char* szModuleName)
{
	CString strModule;
	BOOL    bFound =   FALSE;
	HANDLE  hModuleSnap  =  NULL;
	MODULEENTRY32   me32   =   {0};
	hModuleSnap  =  ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dWProcessId);
	if(hModuleSnap == INVALID_HANDLE_VALUE)
	{
		return false;
	}
	me32.dwSize = sizeof(MODULEENTRY32);
	if(::Module32First(hModuleSnap,   &me32))
	{
		do
		{
			strModule.Format("%s",me32.szModule);
			if (!strcmp(szModuleName,strModule.GetBuffer())) // 如果找到则返回true
			{
				::CloseHandle(hModuleSnap);
				return true;
			}
		}
		while(::Module32Next(hModuleSnap,&me32));
	}
	::CloseHandle(hModuleSnap);
	return false;
}

/***************************************************/
/*  函数: 测试按钮函数
/*	返回: 无
/*  创建人:			日期		内容
/*	金胖胖		2015年2月25日	新建
/***************************************************/
void CUIConsoleDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	this->m_list.DeleteAllItems();
	DWORD dwID = ::GetCurrentProcessId();

	if (this->GetAllModules(dwID,"GameHelpMfcDll.dll"))
	{
		AfxMessageBox("找到模块了");
	}
	else
	{
		AfxMessageBox("没找到模块");
	}
时间: 2024-10-10 22:02:28

VC中遍历目标进程中的模块的相关文章

学习笔记之卸载远程目标进程中的DLL模块(转)

学习笔记之卸载远程目标进程中的DLL模块 (2007-07-23 23:51:02) 转载▼ 学习笔记之卸载远程目标进程中的DLL模块2007/7/231.首先得把DLL模块中的线程结束使用CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);创建系统线程的快照然后用Thread32First()和Thread32Next()遍历系统中所有线程.将遍历到的线程保存到THREADENTRY32结构,然后判断结构中的th32OwnerProcessID成员是否与

通过PEB遍历当前进程中的模块(C语言实现)

0x00 相关说明: Windows应用层如果要遍历当前进程所加载的模块可以使用WIN32API通过进程快照来实现 通过PEB来遍历进程模块没有WIN32API的使用痕迹,在某些场合更加好用 其中32位应用程序的 PEB 的地址可以通过 fs:[0x30]获取,fs:[0]为TEB结构的地址 0x01 相关数据结构: 下面的数据结构可以在windbg中使用命令查看(使用 dt <数据结构名称>) typedef  struct  _TEB {  //fs:[0]     NT_TIB     

在PHP中遍历数据库表中的数据

数据库中的数据: //1.分别将每一行的每一列遍历出来 //mysql_fetch_row()函数在每一次遍历后会将指针向后自动移动一个单位 while($row=mysql_fetch_row($result)){     echo "日期:".$row[0]."<br/>";     //row[i]该行的第几个字段(即第几列)    echo "姓名:".$row[1]."<br/>";} 输出结

js中遍历删除数组中的项(项目中遇到的问题解决)

代码如下: for (var key=0;key<$scope.pageContent.messages.length;key++){ if($scope.pageContent.messages[key].messagePushType==undefined){ $scope.pageContent.messages.splice(key,1); key-=1; } } 重点在与key-=1,要让key随着被截取后数组长度的变化而变化,截取一个,key少一次.

使用ptrace向已运行进程中注入.so并执行相关函数(转)

1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对应的地址,然后通过此地址便可在目标进程中进行调用. 到底是如何注入的呢? 本文实现方案为:在目标进程中,通过dlopen把需要注入的.so加载到目标进程的空间中. 2. 如何让目标进程执行dlopen加载.so? 显然,目标进程本来是没有实现通过dlopen来加载我们想注入的.so,为了实现此功能,

使用ptrace向已运行进程中注入.so并执行相关函数

这个总结的很好,从前一个项目也用到这中技术 转自:http://blog.csdn.net/myarrow/article/details/9630377 1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对应的地址,然后通过此地址便可在目标进程中进行调用. 到底是如何注入的呢? 本文实现方案为:在目标进程中,通过dlopen把需要注入的.so加载到

程序中打印当前进程的调用堆栈(backtrace)

为了方便调式程序,产品中需要在程序崩溃或遇到问题时打印出当前的调用堆栈.由于是基于Linux的ARM嵌入式系统,没有足够的空间来存放coredump文件. 实现方法,首先用__builtin_frame_address()函数获取堆栈的当前帧的地址(faddr), ×faddr(栈帧的第一个单元存放的数据)即当前函数的返回地址,及调用函数中的指令地址.×(faddr-1)是调用函数的栈帧的地址,即栈帧中保存了调用函数的栈帧的地址.由此可知,同一线程的所有栈帧组成了一个链表.遍历此链表,就可以打印

windows进程中的内存结构(好多API,而且VC最聪明)

在阅读本文之前,如果你连堆栈是什么多不知道的话,请先阅读文章后面的基础知识.   接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据.那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论.下文中的C语言代码如没有特别声明,默认都使用VC编译的release版.   首先,来了解一下 C 语言的变量是如何在内存分部的.C 语言有全局变量(Global).本地变量(Local),静态变量(Static).寄存器变量(Regeister).每种变量都

VC禁止在任务管理器中结束本进程

转自百度空间:http://hi.baidu.com/175943462/item/657905e13b73b70b8d3ea8bb 一提到进程保护特别是在Windows下,没有最安全,只有更安全.下面的代码是在用户层,截获任务管理器的本进程名(Test.exe)被选中时的消息,以防止用任务管理器结束掉进程(当然你用其他进程工具当然可以结束掉咯!).主要是要学习这里面的方法.熟悉几个结构体.几个API而矣: 1.LVITEM Specifies or receives the attribute