Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Desire7
3 / 3 / 2
Регистрация: 03.09.2013
Сообщений: 37
1

Чтение в памяти указателя на другой адрес

14.06.2015, 18:51. Просмотров 745. Ответов 4
Метки нет (Все метки)

В общем у меня получается считывать только значение в памяти, а вот указатель что-то не выходит.
Вот как считываю значение:
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
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
 
namespace Project1
{
    class MyMemory
    {
        const int PROCESS_WM_READ = 0x0010;
 
        [DllImport("kernel32.dll")]
        public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
 
        [DllImport("kernel32.dll")]
        public static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
 
        public static void ReadMemory()
        {
            Process process = Process.GetProcessesByName("gta_sa").FirstOrDefault();
            IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id);
 
            int bytesRead = 0;
            byte[] buffer = new byte[100];
 
            ReadProcessMemory((int)processHandle, 0xF6C8898, buffer, buffer.Length, ref bytesRead);
            
            MessageBox.Show(Encoding.ASCII.GetString(buffer));
        }
 
    }
}
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2015, 18:51
Ответы с готовыми решениями:

Чтение памяти - Не читается даже самый первый базовый адрес
Во общем хочу прочитать память, нужно прочитать так: Читаю базовый адресс...

Адрес памяти переменной
День добрый Подскажите, пожалуйста, как получить адрес памяти, в которой...

Адрес элемента List-a в памяти
Есть вот такой вот Лист: List<int> spisok = new List<int>; Например в нем 3...

Чтение из не защищённой памяти
Вот код: /* * Created by SharpDevelop. * User: User * Date: 27.03.2016...

Чтение из памяти по указателю
В своей программе я получаю указатель на начало буфера в памяти в виде целого...

4
kolorotur
Эксперт .NET
10489 / 8678 / 2157
Регистрация: 17.09.2011
Сообщений: 14,895
Завершенные тесты: 1
14.06.2015, 19:58 2
Цитата Сообщение от Desire7 Посмотреть сообщение
а вот указатель что-то не выходит
Указатель — это значение адреса, по которому хранятся данные.

Следовательно, данные через указатель считываются за два захода:
1. Считывается значение указателя по адресу.
2. Считываются данные по значению указателя, полученному в первом шаге.
1
Desire7
3 / 3 / 2
Регистрация: 03.09.2013
Сообщений: 37
14.06.2015, 20:02  [ТС] 3
А считывать как int?
0
kolorotur
Эксперт .NET
10489 / 8678 / 2157
Регистрация: 17.09.2011
Сообщений: 14,895
Завершенные тесты: 1
14.06.2015, 20:04 4
Цитата Сообщение от Desire7 Посмотреть сообщение
А считывать как int?
Или как long, в зависимости от разрядности считываемого приложения.
1
Desire7
3 / 3 / 2
Регистрация: 03.09.2013
Сообщений: 37
14.06.2015, 22:04  [ТС] 5
В общем все оказалось легко. Вдруг кому пригодится:
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
52
53
54
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms; // Тут нужно только для MessageBox.Show
 
namespace Project1
{
    class MyMemory
    {
        const int PROCESS_WM_READ = 0x0010;
 
        [DllImport("kernel32.dll")]
        public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
 
        [DllImport("kernel32.dll")]
        public static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
 
        public static void ReadMemory()
        {
            
            IntPtr dllBase = IntPtr.Zero;
            int dllLength = 0;
            string processName = "имя процесса"; // Без ".exe"
 
            Process process = Process.GetProcessesByName(processName ).FirstOrDefault();
            IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id);
 
            int bytesRead = 0;
            byte[] buffer = new byte[15]; // Массив байт для выходного значения
            byte[] addr = new byte[255]; // Массив байт для смещения
            
            // Найти смещение dll, если надо
            foreach (ProcessModule item in process.Modules)
            {
                if (item.ModuleName == "имя длл.dll")
                {
                    dllBase = item.BaseAddress;
                    dllLength = item.ModuleMemorySize;
                    break;
                }
            }
            
            ReadProcessMemory((int)processHandle, (int)dllBase + 0x21A190, addr, addr.Length, ref bytesRead);
            int intAddr = BitConverter.ToInt32(addr, 0);
            ReadProcessMemory((int)processHandle, intAddr + 0x40, buffer, buffer.Length, ref bytesRead);
            
 
            MessageBox.Show(Encoding.ASCII.GetString(buffer).ToString()); // Вывод в MsgBox
        }
 
    }
}
0
14.06.2015, 22:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2015, 22:04

Чтение памяти процесса
Имеется задача прочитать память некого процесса. Моя сборка для 32-битных...

Что будет с массивом если его ссылочной переменной присвоить другой адрес?
что будет с массивом если его ссылочной переменной присвоить другугой адресс?...

Чтение памяти запущенного процесса
Уважаемые, подскажите, как и чем можно воспользоваться для чтения памяти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru