eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Вопрос про WriteProcessMemory Delphi7
<< . 1 . 2 . 3 .
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Статус: Участник

Создано: 3 ноября 2019 19:08 New!
Цитата · Личное сообщение · #1

Здравствуйте, уважаемые пользователи. Помогите мне решить невнятную проблему.
Объясню суть, имеется программа, написанная на c#, мне необходимо изменить всего лишь один байт в памяти этой программы при её работе. Для изменения памяти я использую функцию, которую использовал очень часто:

Code:
  1. procedure MemWrite(pHandle:THandle;Address:Pointer; Bytes:pchar; nSize:DWORD);
  2. var
  3.   BytesWrite:Dword;
  4.   oldprotect: DWORD;
  5. begin
  6.   VirtualProtectEx(pHandle,Address, nSize, PAGE_EXECUTE_READWRITE, @oldProtect);
  7.   WriteProcessMemory(pHandle,Address, Bytes, nSize, BytesWrite);
  8.   VirtualProtectEx(pHandle,Address, nSize, oldProtect, @oldProtect);
  9. end;


Всё работает, байт меняется. НО есть одно НО, через время работы программы на ПК возникает ошибка "На компьютере не достаточно памяти", следом идут всяческие ошибки с закрытием этой программы.
Но суть в том, что если эту программу перезапустить и сделать тоже самое, эта ошибка появится уже очень скоро, через минут 5 работы. Складывается такое ощущение, что память забивается непонятно где и не освобождается при закрытии этой программы.
Однако, если не менять этот байт, программа успешно может работать и 48 часов без перебоев.
Также я заметил, что если изменить этот байт через CheatEngine - всё также хорошо работает.
Вопрос, в чем проблема возникает? Проверяется на х64 системе. Прошу мне помочь.


Ранг: 755.8 (! !)
Статус: Участник
Student

Создано: 5 ноября 2019 18:41 New!
Цитата · Личное сообщение · #2

DenCoder пишет:
Дельфи виноват?

руки скорее не оттуда)

Ранг: 69.5 (постоянный)
Статус: Участник

Создано: 5 ноября 2019 18:55 New!
Цитата · Личное сообщение · #3

UniSoft пишет:
Или на нем висит какой-либо протектор?

Скорее всего..
GC никто не отменял..

Добавлено спустя 4 минуты
wladimir55 пишет:
написанная на c#

Была подобная, vMix вроде..

Ранг: 2.0 (гость)
Статус: Участник

Создано: 5 ноября 2019 20:48 · Поправил: wladimir55 New!
Цитата · Личное сообщение · #4

По поводу протектора, die показывает .Net Reactor(4.5-4.7). Но суть то в том, почему же с CE нет такой проблемы. По поводу C++, программа проработала 17 часов и очень скоро я всё-таки буду использовать именно его :D

Добавлено спустя 1 минуту
Само приложение C# WPF
Протектор снять получается, но задача делать патч на лету, чтобы не исправлять каждую обнову. Меняю я именно букву, в оригинале там буква p (#$70), я меняю её на a (#$61).


Ранг: 1993.2 (!!!!)
Статус: Модератор
retired

Создано: 5 ноября 2019 21:53 New!
Цитата · Личное сообщение · #5

SeDebugPrivilege нужна для открытия разноуровневых процессов. Имеется в виду процессов от другого пользователя, более привилегированных и тд. Если это процессы одного юзера в одной сессии и одного уровня элевации никакие привилегии отладки не нужны, ни для записи в память, ни для создания удалённых потоков, ни для чего-то ещё. Более того, это нужно только для OpenProcess. Если она прошла удачно, привилегия больше не требуется.

| Сообщение посчитали полезным: dezmand07, UniSoft



Ранг: 50.4 (постоянный)
Статус: Участник

Создано: 6 ноября 2019 03:06 · Поправил: UniSoft New!
Цитата · Личное сообщение · #6

wladimir55
не хотите выкладывать на паблик скиньте в приват сам exe'шник проги
iarkgen{dog}gmail{dot}com (в запароленном архиве, и расширение измените на что-нибудь типа zzz, иначе гугл не пропустит).
либо просто ссылку.
может тогда и смогу сказать больше...

Ранг: 2.0 (гость)
Статус: Участник

Создано: 10 ноября 2019 17:11 New!
Цитата · Личное сообщение · #7

Тему можно закрыть. Сделал на C++. Проблему в Delphi так и не нашёл.
<< . 1 . 2 . 3 .
 eXeL@B —› Вопросы новичков —› Вопрос про WriteProcessMemory Delphi7
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS