Как получить доступ к файлам в ROM

Средства разработки, технические вопросы, отвечает (по мере сил) Отдел Разработок
Закрыто
mkol
Академик (6 lvl)
Сообщения: 1189
Зарегистрирован: Вс апр 11, 2004 12:14

Доступ к файлам в ROM

Сообщение mkol » Ср фев 09, 2005 20:06

Необходимо скопировать файл из ПЗУ КПК. Имел ли кто положительный опыт по извлечению файлов? Поделитесь пожалуйста информацией или какой-нибудь утилитой для этого: <4 буквы>@nm.ru

Аватара пользователя
KAjFASH
Кандидат (3 lvl)
Сообщения: 117
Зарегистрирован: Чт авг 19, 2004 16:40

Сообщение KAjFASH » Ср фев 09, 2005 21:27

Это у вас не получится :( -- exe/dll-файлы хранятся в спец формате (архивированные).
РегардЗ...
iPAQ, FS LOOX, Versija, Palm, Symbol... SD: 64,128,512
www.salesworks.com.ua

mkol
Академик (6 lvl)
Сообщения: 1189
Зарегистрирован: Вс апр 11, 2004 12:14

Сообщение mkol » Пн фев 14, 2005 12:52

Если система умеет их извлекать и запускать, значит это можно сделась и в обход системы, но как? Где можно найти подробную информацию о формате ROM файлов КПК?

Аватара пользователя
KAjFASH
Кандидат (3 lvl)
Сообщения: 117
Зарегистрирован: Чт авг 19, 2004 16:40

Сообщение KAjFASH » Пн фев 14, 2005 13:07

Можно написать програмульку которая загружает модуль используя LoadLibrary, затем создать снапшот используя CreateToolhelp32Snapshot. Затем функциями Module32First и Module32Next добраться до нужного модуля. Структура MODULEENTRY32 имеет modBaseAddr адрес модуля и размер в modBaseSize. Тады можно создать файл и залить все данные с modBaseAddr длиной modBaseSize. Если получитса -- брось суды сорсы. :)
РегардЗ...
iPAQ, FS LOOX, Versija, Palm, Symbol... SD: 64,128,512
www.salesworks.com.ua

mkol
Академик (6 lvl)
Сообщения: 1189
Зарегистрирован: Вс апр 11, 2004 12:14

Сообщение mkol » Вт фев 15, 2005 14:41

А можно дать ссылки (или прислать по почте подробную информацию)?

Аватара пользователя
KAjFASH
Кандидат (3 lvl)
Сообщения: 117
Зарегистрирован: Чт авг 19, 2004 16:40

Сообщение KAjFASH » Вс фев 20, 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.
}
РегардЗ...
iPAQ, FS LOOX, Versija, Palm, Symbol... SD: 64,128,512
www.salesworks.com.ua

Закрыто

Вернуться в «Программирование для КПК»