Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

написать 8-чный и 16-ный дамп - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти все n-значные числа Армстронга для данного n<9 http://www.cyberforum.ru/cpp-beginners/thread105425.html
Натуральное n-значное число называется числом Армстронга, если оно равно сумме n-х степеней своих цифр. Найти все n-значные числа Армстронга для данного n<9, каждое такое число вывести с новой...
C++ Нужно программу на Паскале переделать в программу на С++ Помогите, пожалуйста!!! У меня есть программа на Паскале , а нужно ее переписать, чтобы она была на С++ (windows консоль). Текст программы на Паскале: var i, i1, i2 ,N, z: integer; ... http://www.cyberforum.ru/cpp-beginners/thread105418.html
C++ Вывести массив в файл
Здрасти. У меня есть процедура ShowMatrix(DeliveryMatrix,max_row,max_col); , которая выводит массив на экран. А как вывести его в файл? ofstream out(12.txt); вот этот способ не работает...
C++ Использование char* в классах
Всем доброе время суток! В общем пытаюсь создать простейший класс с использованием char* для представления строк При компиляции появляются непонятные ошибки(мне непонятные). Использую среду...
C++ Вычислите площадь и объем правильного шестиугольника http://www.cyberforum.ru/cpp-beginners/thread105397.html
Вычислите площадь и объем правильного шестиугольника за стороной а, используя функцию вычисления площади треугольника. Данная функция должна возвращать в главную программу все вычисленные значения....
C++ Работа с файловой системой Помогите решить задачу по Системному Программному Обеспечению пишу сдесь потому что мне кажется что это не для начинающих уже:) вобщем условие: приложение содержит проводник выбора... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,470
16.03.2010, 21:03
Когда говорят о дампе подрвзумевают снимок памяти. Вот снимок участка памяти какого-нибудьпроцесса. Есть два исходника, кидаешь их в одну папку
Значит, так. Залезай в файл ra.cpp и в макросах прописывай две вещи:

Количество байт, которые нужно считать (например)
#define KolichestvoSchitivaemihBait 0x10

Номер байта, с которого нужно начать считывание (наприме)
#define NacalniAdres 0x71ab2e70

И имя процесса, например
char ima_protcessa[] = "ICQ.exe";

Кмпилиру, запускай и получай дамп участка памяти.
Вот исходники

ra.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <windows.h>
 
#include <stdio.h>
#include "handle_processa.cpp"
 
 
 
// Вручную вводим эти два значения и имя процесса
#define KolichestvoSchitivaemihBait 0X100
#define NacalniAdres 0x401000
 
//ЗДесь пишешь имя процесса, дамп которого теьбе надо сделать
char ima_protcessa[] = "messagebox.exe";
//Внимание! Имя процесса писать безо всякого пути! Толлько messagebox.exe и не иначе! Короткое то есть имя!
 
 
int main ( ) { 
 
 int i= 0;
 int j= 0;
 
 //Ищем хэндл процесса
 HANDLE hProcess= HandleProcessa (ima_protcessa);
 if (!hProcess) {
  printf ("process ne otkrit\n");
 }
 
 /*В эту переменную будет считываться каждый байт, а потом выводиться на экран.
 Она должня быть именно не сhar, если будет сhar, тогда может вывестись вместо 90 ffffff90
 проверено уже. 
 Поскольку вряд ли всё это дело лезет в экран, можно запустить прогу в консоли, а вывод перенаправить в файл
 */
 
 unsigned char  lpBuffer ;
 
 //Вот, всё. Такой вот цикл. Выводится значение байта, а рядом- его порядковый номер. 
 for (i; i< KolichestvoSchitivaemihBait; i++) {
  ReadProcessMemory (hProcess, (void*)(NacalniAdres+ i), &lpBuffer, 1, 0  );
  
  printf ("0X%x,   %d      "   , lpBuffer, i+1  );
  if (j++== 3) {
   printf ("\n");
   j= 0;
  }
 }
 printf ("konets\n");
 
 getchar ();
 
 CloseHandle (hProcess);
}

handle_processa.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef uslovni_fail
#define uslovni_fail
 
 
 
#include <stdio.h> 
#include <Windows.h> 
#include <Winnt.h> 
//Здесь определена структура PROCESSENTRY32 и функция CreateToolhelp32Snapshot
#include <tlhelp32.h>
//int main ();
HANDLE HandleProcessa (char* szFilename) {
 
 HANDLE hProcessSnap;
 PROCESSENTRY32 pe32;
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 
 do {
  if (!Process32Next(hProcessSnap, &pe32)) // перечисляем процессы
  return FALSE;
 }
 while (lstrcmpi(pe32.szExeFile, szFilename)); // ищем нужный процесс. Его PID будет в поле pe32.th32ProcessID              
 
 
 CloseHandle(hProcessSnap);
 
 //Тот самый хэрдл, который ищем
 HANDLE hProcess;
 
 
 //Функция OpenProcess возвращает дескриптор процесса, а третий принимаемый ею параметр- идентификатор процесса
 // (PID)
 
//Внимание! Не для всех процессов возвращается хэндл, если права доступа PROCESS_ALL_ACCESS
//Приходится использовать только для чтения
 hProcess = OpenProcess(PROCESS_VM_READ, 0, pe32.th32ProcessID);
 
 return hProcess;
};
#endif
...Вся эта херь работает в DEV C++, как в других IDE, не знаю

Добавлено через 7 минут
Да, кстати. дамп будет шестнадцатиричным. Насчёт восьмеричного не знаю.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru