能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你是小强麽??????
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
学习一下,哈哈
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
其实有个简单的方法。。。
就是分析模块的PE头。。。
|
能力值:
( LV13,RANK:410 )
|
-
-
5 楼
LPVOID GetModuleSize(LPVOID ModuleBase)
{
PROCESS_BASIC_INFORMATION* ppbi;
PULONG temp;
ZwQueryInformationProcess(GetCurrentProcess(),ProcessBasicInformaion,ppbi,sizeof(PROCESS_BASIC_INFORMATION* ),&temp);
LDR_DATA_TABLE_ENTRY* ldte=*(ppbi.PebBaseAddress.LoaderData).InMemoryOrderModuleList;
LDR_DATA_TABLE_ENTRY* ldte1=ldte;
do
{
LPVOID return_value=-1; // ERR_NOT_FOUND
if (ldte1.DllBase==ModuleBase) then return_value=ldte1.Reserved3;//SizeOfImage
ldte1=ldte1.InMemoryOrderLinks.Flink;
}while(ldte1!=ldte)
return return_value;
}
大概这样不知道行不行
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
#include <stdio.h>
#include <windows.h>
DWORD module_size(char *name)
{
DWORD base = 0;
IMAGE_DOS_HEADER dos_header = {0};
IMAGE_NT_HEADERS nt_headers = {0};
base = (DWORD)GetModuleHandle(name);
if(!base)return -1;
dos_header = *(IMAGE_DOS_HEADER*)base;
if(dos_header.e_magic != 'M' + 'Z' * 256)
{
return -1;
}
nt_headers = *(IMAGE_NT_HEADERS*)(base + dos_header.e_lfanew);
if(nt_headers.Signature != 'P' + 'E' * 256)
{
return -1;
}
return nt_headers.OptionalHeader.SizeOfImage;
}
int main(int argc, char *argv[])
{
if(argc == 1)
{
printf("size: %d\n",module_size(NULL));
return 0;
}else if(argc == 2)
{
DWORD addr = module_size(argv[1]);
if(addr != -1)
{
printf("size: %d\n",addr);
return 0;
}else{
printf("module %s not found\n",argv[1]);
return -1;
}
}
return -1;
}
大概这样。嗯。
|
能力值:
( LV6,RANK:80 )
|
-
-
7 楼
BOOL WINAPI GetModuleInformation(
__in HANDLE hProcess,
__in HMODULE hModule,
__out LPMODULEINFO lpmodinfo,
__in DWORD cb
);
http://baike.baidu.com/view/2003517.htm
|
|
|