能力值:
( LV2,RANK:10 )
|
-
-
2 楼
windows ce 5 以及以下版本可以先通过pid获取本进程所在的slot,获取base addr,读之即可。
ce 6下要绕几个弯子。建议楼主先研究下windows ce的内存结构。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
mowenli,十分感谢!
我是要在wince5.0下弄这件事情,能不能再具体点呢
msdn上也搜了一下,没有找到相应的api诶
wince 的内存结构是看了一些时间
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
并没有找到像mowenli所说的用pid得到slot number的方法
要是哪位高手知道的话还望告之啊 3x
现在变通地通过用Toolhelp32Snapshot的方法遍历比较得到目标进程的slot number和base addr
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
int slot;
DWORD *dwBaseAddr;
hProcessSnap =
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPNOHEAPS, 0 );
if( hProcessSnap != INVALID_HANDLE_VALUE )
{
memset(&pe32,0x00,sizeof(PROCESSENTRY32));
pe32.dwSize = sizeof( PROCESSENTRY32 );
if( Process32First( hProcessSnap, &pe32 ) )
{
do
{
//hDestMoudle目标进程的句柄,wince5.0下也即pid
if (pe32.th32ProcessID == (DWORD)hDestMoudle)
{
//slot number
slot = pe32.th32MemoryBase/0x02000000;
//base addr基地址
dwBaseAddr = (DWORD *)pe32.th32MemoryBase;
//尝试得到目标进程在内存中映像的dos头或pe头 但发现结构中均为0
PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER)dwBaseAddr;
if (IsBadReadPtr(pDOSHeader,sizeof(IMAGE_DOS_HEADER)))
{
PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)dwBaseAddr;
if (IsBadReadPtr(pNTHeader,sizeof(PIMAGE_NT_HEADERS)))
return;
}
}
} while( Process32Next( hProcessSnap, &pe32 ) );
}
CloseToolhelp32Snapshot( hProcessSnap );
}
为了简便试验中的目标进程就是当前进程
现在想得到进程的输入表,就想通过base addr得到pe在内存映像中的dos头或pe头,但是未果。
不知是不是因为wince下加载pe文件的方式不同还是?
还望高手指点!3x
要是谁有wince 下pe内存映射的资料麻烦贴一下,谢过先
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
自己up一下
期待高手指点
|
|
|