HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: Как получить доступ к файлам в ROM

[Ответить]
mkol [09.02.2005 20:06] Доступ к файлам в ROM:
Необходимо скопировать файл из ПЗУ КПК. Имел ли кто положительный опыт по извлечению файлов? Поделитесь пожалуйста информацией или какой-нибудь утилитой для этого: <4 буквы>@nm.ru
KAjFASH [09.02.2005 21:27] :
Это у вас не получится -- exe/dll-файлы хранятся в спец формате (архивированные).
mkol [14.02.2005 12:52] :
Если система умеет их извлекать и запускать, значит это можно сделась и в обход системы, но как? Где можно найти подробную информацию о формате ROM файлов КПК?
KAjFASH [14.02.2005 13:07] :
Можно написать програмульку которая загружает модуль используя LoadLibrary, затем создать снапшот используя CreateToolhelp32Snapshot. Затем функциями Module32First и Module32Next добраться до нужного модуля. Структура MODULEENTRY32 имеет modBaseAddr адрес модуля и размер в modBaseSize. Тады можно создать файл и залить все данные с modBaseAddr длиной modBaseSize. Если получитса -- брось суды сорсы.
mkol [15.02.2005 14:41] :
А можно дать ссылки (или прислать по почте подробную информацию)?
KAjFASH [20.02.2005 12:36] :
Нашел в нете://==============================================================================
#include
#include
#include
#include
#include

BOOL GetProcessList (void);
BOOL GetProcessModuleList (DWORD);

BOOL GetProcessList()
{
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
BOOL bRet = FALSE;

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)
return bRet;

pe32.dwSize = sizeof(PROCESSENTRY32);

if (Process32First(hProcessSnap, &pe32))
{
do
{
bRet = TRUE;

if (offsetof(PROCESSENTRY32, szExeFile) <= pe32.dwSize)
printf("%s\n", pe32.szExeFile);

if (offsetof(PROCESSENTRY32, th32ProcessID) <= pe32.dwSize)
GetProcessModuleList(pe32.th32ProcessID);

printf("\n");
pe32.dwSize = sizeof(PROCESSENTRY32);
}
while (Process32Next(hProcessSnap, &pe32));
}
CloseHandle(hProcessSnap);
return bRet;
}

BOOL GetProcessModuleList (DWORD th32ProcessID)
{
HANDLE hModuleSnap = NULL;
MODULEENTRY32 me32 = {0};
BOOL bRet = FALSE;

hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, th32ProcessID);

if (hModuleSnap == INVALID_HANDLE_VALUE)
return bRet;

me32.dwSize = sizeof(MODULEENTRY32);

if (Module32First(hModuleSnap, &me32))
{
do
{
bRet = TRUE;

if (offsetof(MODULEENTRY32, szExePath) <= me32.dwSize)
printf("\t%s\n", me32.szExePath);

me32.dwSize = sizeof(MODULEENTRY32);
}
while (Module32Next(hModuleSnap, &me32));
}
CloseHandle(hModuleSnap);
return bRet;
}

int main(void)
{

if (GetProcessList())
return 0;
else
return 1;

}
//==============================================================================DWORD GetModuleBaseAddress(DWORD iProcId, char* DLLName)
{
HANDLE hSnap; // Process snapshot handle.
MODULEENTRY32 xModule; // Module information structure.

hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, iProcId); // Creates a module
// snapshot of the
// game process.
xModule.dwSize = sizeof(MODULEENTRY32); // Needed for Module32First/Next to work.
if (Module32First(hSnap, &xModule)) // Gets the first module.
{
while (Module32Next(hSnap, &xModule)) // Loops through the rest of the modules.
{
if (strcmp(xModule.szModule, DLLName) == 0) // If this is the module we want...
{
CloseHandle(hSnap); // Free the handle.
return (DWORD)xModule.modBaseAddr; // return the base address.
}
}
}
CloseHandle(hSnap); // Free the handle.
return 0; // If the result of the function is 0, it didn't find the base address.
// i.e.. the dll isn't loaded.
}
[Ответить]