Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> дамп памяти процесса, для WM 6.0 
:(
    Опции темы
александр1
Дата 26.10.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



здравствуйте! хотелось бы узнать с помощью какой утилиты можно снать дамп памяти конкретного системного процесса, или как это реализовать самому программно (с помощью функции MiniDumpWriteDump пробовал, на мобайле не катит)
PM MAIL   Вверх
smoke_man
Дата 27.10.2009, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



Читает 20 байт памяти текущего процесса:
Код

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <windows.h>

int main()
{
    HANDLE hProcess = GetCurrentProcess();
    SIZE_T readbyte = 0;
    unsigned char *buffer = new unsigned char[20];
    int start = 0x00411172;
    ReadProcessMemory(hProcess,(void *)start,buffer,20,&readbyte);
    for(int i = 0; i< readbyte;i++)
        printf("%x\n",buffer[i]);
    std::cout<<std::endl;
    delete [] buffer;
    system("pause");
    return EXIT_SUCCESS;
}


Добавлено через 1 минуту и 36 секунд
на WM не проверял - но попробывать можно.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
DrHex
Дата 27.10.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Цитата

системного процесса

Надо повышать своему процессу привелегии....

Лучше всего через ring-0
--------------------
google.com и это все.
PM MAIL   Вверх
александр1
Дата 28.10.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



smoke_man спасибо, именно то что нужно было, 1 вопрос только: как получить начальный адресс процесса
у вас он сразу задан int start = 0x00411172;
PM MAIL   Вверх
smoke_man
Дата 28.10.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



Для текущего процесса можно так:
Код

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <windows.h>

int main()
{
    int start;
    __asm{ 
        call blabla 
blabla: 
        mov eax, [esp] 
        mov start, eax 
        sub esp, 4 
    }
    HANDLE hProcess = GetCurrentProcess();
    SIZE_T readbyte = 0;
    unsigned char *buffer = new unsigned char[20];
    //int start = 0x00411172;
    ReadProcessMemory(hProcess,(void *)start,buffer,20,&readbyte);
    for(int i = 0; i< readbyte;i++)
        printf("%x\n",buffer[i]);
    std::cout<<std::endl;
    delete [] buffer;
    system("pause");
    return EXIT_SUCCESS;

}



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
bra1ny
Дата 29.10.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Из PEB можно узнать. 


Код

nt!_PEB
   +0x000 InheritedAddressSpace : UChar
   +0x001 ReadImageFileExecOptions : UChar
   +0x002 BeingDebugged    : UChar
   +0x003 SpareBool        : UChar
   +0x004 Mutant           : Ptr32 Void
   +0x008 ImageBaseAddress : Ptr32 Void
....
...
....

--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
александр1
Дата 29.10.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



немножко несовсем понял можно поподробней?)) а разве нет каких нибудь апи функции для этого?

int start;
    __asm{ 
        call blabla 
blabla: 
        mov eax, [esp] 
        mov start, eax 
        sub esp, 4 
    }
это вариант не работает smile 

Это сообщение отредактировал(а) александр1 - 29.10.2009, 22:26
PM MAIL   Вверх
smoke_man
Дата 29.10.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



ты его на wm6 использовал?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
александр1
Дата 29.10.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



на эмуляторе проверял

нашел на одном сайте такой способ:

I. Открываем процесс
// Открываем процесс (DWORD dwProcessId - идентификатор процесса)
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);

II. Получаем HMODULE процесса
Для дальнейшей работы необходим этот идентификатор. Для Своего процесса его можно легко получить с помощью GetModuleHandle(NULL). Как показывает практика он и для других процессов такой же, даже более того он похоже всегда равен 0x00400000, но для надежности следует его получать правильно. А правильно его можно получить с помощью одного выкрутаса

// получаем HMODULE 
HMODULE hMod = NULL;
HANDLE hThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)GetModuleHandle, NULL, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread, (LPDWORD)&hMod);
CloseHandle(hThread);

Здесь в другом процессе создается поток который предстовляет собой апишную функцию GetModuleHandle, к счастью параметры его совпадают с параметрами LPTHREAD_START_ROUTINE а адреса таких функций во всех процессах находятся по одним и тем-же адресам, так что вызов её произойдет без особых проблем.

III. Читаем память 
Здесь уже может быть куча вариатнов работы. Самое простое воспользоваться функцией из библиотеки PSAPI - GetModuleInformation. Правда для этого в VC 6.0 нужнор последнее SDK или грузить функцию напрямую из psapi.dll. Как с этим обстоят дела в Делфи - незнаю. Вот пример -

// Получаем стартовый адрес и размер 
MODULEINFO modinfo;
GetModuleInformation(hProc,         // handle to process
                                 hMod,         // handle to module
                                 &modinfo,  // information buffer
                                 sizeof(MODULEINFO)           // size of buffer
                                 );
// Создаем буфер и читаем туда =)
PBYTE pBuffer = new BYTE[modinfo.SizeOfImage];                        
ReadProcessMemory(hProc, modinfo.lpBaseOfDll, pBuffer, modinfo.SizeOfImage, &dwReaded);

Но хоть убей что не делаю, функцию CreateRemoteThread не распознает компилятор Oo


PM MAIL   Вверх
smoke_man
Дата 29.10.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



Ну на wm6 этот код работать конечно не будет - но можно сделать по аналогии - разница в том что у тебя WM крутится под арм-контроллером. У него несколько другая архитектура и ассемблер тоже. А насчет CreateRemoteThread нужно посмотреть в sdk на wm6 - поддерживается она платформой или нет. Насчет PEB тоже можно посмотреть в sdk.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
александр1
Дата 29.10.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



Цитата(smoke_man @  29.10.2009,  23:37 Найти цитируемый пост)
А насчет CreateRemoteThread нужно посмотреть в sdk на wm6 - поддерживается она платформой или нет

 как посмотреть (извиняюсь за тупые вопросы) smile 
PM MAIL   Вверх
smoke_man
Дата 29.10.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



ты какую среду используешь для WM6? Кстати, PEB тоже не попользуешь.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
александр1
Дата 29.10.2009, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



Visual Studio 2008
PM MAIL   Вверх
smoke_man
Дата 30.10.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



Windows Mobile 6 SDK установлен?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
александр1
Дата 30.10.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



да, установлен
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0781 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.