Вопрос Работа с памятью в C#

Начинающий
Статус
Оффлайн
Регистрация
21 Апр 2024
Сообщения
17
Реакции[?]
0
Поинты[?]
0
Извините за глупые вопросы.

Как я могу получить процесс, из этого процесса получить модуль, а потом внутри него уже искать по указателям?
Желательно использовать NuGet библиотеку, чтобы занимало мало строк.
 
Начинающий
Статус
Оффлайн
Регистрация
3 Дек 2020
Сообщения
29
Реакции[?]
2
Поинты[?]
0
erwerqw:
using System;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Process.NET;
using Process.NET.Memory;

class Program
{
    static async Task Main(string[] args)
    {
        // стартаем процесс если он не заущен
        Process process = Process.GetProcessesByName("process.exe").FirstOrDefault();
        if (process == null)
        {
            process = Process.Start("process.exe"); // свой процесс
            await Task.Delay(2000);
        }

        // гетаем экземпляр чтобы в дальнейшем над ним работать
        using (var processSharp = new ProcessSharp(process, MemoryType.Remote))
        {
            // модуль по имени
            var module = processSharp.ModuleFactory.GetModuleByName("YourModuleName.dll");
            if (module == null)
            {
                Console.WriteLine("Модуль не найден");
                return;
            }

            // ищем по указателям
            IntPtr baseAddress = module.BaseAddress;
            var memory = processSharp.Memory;
            int offset1 = 0x123456; // твои оффсеты
            int offset2 = 0x789ABC;
            IntPtr pointerAddress = memory.Read<IntPtr>(baseAddress + offset1);
            IntPtr finalAddress = pointerAddress + offset2;
            int value = memory.Read<int>(finalAddress);

            Console.WriteLine($"value - {value}");
        }
    }
}
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
21 Апр 2024
Сообщения
17
Реакции[?]
0
Поинты[?]
0
erwerqw:
using System;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Process.NET;
using Process.NET.Memory;

class Program
{
    static async Task Main(string[] args)
    {
        // стартаем процесс если он не заущен
        Process process = Process.GetProcessesByName("process.exe").FirstOrDefault();
        if (process == null)
        {
            process = Process.Start("process.exe"); // свой процесс
            await Task.Delay(2000);
        }

        // гетаем экземпляр чтобы в дальнейшем над ним работать
        using (var processSharp = new ProcessSharp(process, MemoryType.Remote))
        {
            // модуль по имени
            var module = processSharp.ModuleFactory.GetModuleByName("YourModuleName.dll");
            if (module == null)
            {
                Console.WriteLine("Модуль не найден");
                return;
            }

            // ищем по указателям
            IntPtr baseAddress = module.BaseAddress;
            var memory = processSharp.Memory;
            int offset1 = 0x123456; // твои оффсеты
            int offset2 = 0x789ABC;
            IntPtr pointerAddress = memory.Read<IntPtr>(baseAddress + offset1);
            IntPtr finalAddress = pointerAddress + offset2;
            int value = memory.Read<int>(finalAddress);

            Console.WriteLine($"value - {value}");
        }
    }
}
Error CS0118 'Process' is a namespace but is used like a type
 
Сверху Снизу