Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2010, 21:23   #11
Neoteric
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 23
По умолчанию

Да, тоже пробовал открывать только на чтение. На последнем и пишет:"не удалось выделить память"


А как насчет варианта не внедриться в уже существующий процесс, а полностью его контролировать с открытия? Это что-то может изменить?
Neoteric вне форума Ответить с цитированием
Старый 05.12.2010, 21:25   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а что за процесс если не секрет?
не антивир ли?
они с нулевого кольца порой защищаются.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.12.2010, 23:38   #13
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Neoteric Посмотреть сообщение
да proc возвращает все правильно, сравнивал с программой WinSpy
ЧЕГОООО??? Какой ещё WinSpy для описателей?!

Срочно бежать читать мат-часть.

Далее, читаем признаки говно-кода и исправляем код:

Код:
// Ниже - просто замена стандартный подпрограмм, принимающая один дополнительный параметр - для удобства

resourcestring
  SMsgOSError     = '%s' + sLineBreak + 'System Error.  Code: %d.' + sLineBreak + '%s';
  SMsgUnkOSError  = '%s' + sLineBreak + 'A call to an OS function failed';

procedure RaiseLastOSError(LastError: Integer; const AMsg: String); overload;
var
  Error: EOSError;
begin
  if AMsg = '' then
    RaiseLastOSError(LastError);

  if LastError <> 0 then
    Error := EOSError.CreateResFmt(@SMsgOSError, [AMsg, LastError,
      SysErrorMessage(LastError)])
  else
    Error := EOSError.CreateResFmt(@SMsgUnkOSError, [AMsg]);
  Error.ErrorCode := LastError;
  raise Error;
end;

procedure RaiseLastOSError(const AMsg: String); overload;
begin
  if AMsg = '' then
    RaiseLastOSError(GetLastError)
  else
    RaiseLastOSError(GetLastError, AMsg);
end;

...

// OK, поехали: сам код.

// Функции GetWindowThreadProcessId требуется допустимый описатель, так что вставляем ремень безопасности:
if not IsWindow(Wnd) then
begin
  SetLastError(ERROR_INVALID_WINDOW_HANDLE);
  RaiseLastOSError('GetWindowThreadProcessId');
end;

// Описатель Wnd - корректен, так что функция всегда завершится успехом
GetWindowThreadProcessId(Wnd, @pid);

// Открытие процесса может быть неудачным:
Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION 
{ правильно указываем требуемый доступ, следуя принципу минимальных привилегий }, False, pid);
if Process = 0 then // проверяем на ошибки
  RaiseLastOSError('OpenProcess');

// Процесс открыт успешно, выделяем в нём память:
Ptr := VirtualAllocEx(Proces, nil, 4096, MEM_RESERVE, PAGE_READONLY);
if Ptr = nil then // проверяем на ошибки
  RaiseLastOSError('VirtualAllocEx');
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось Stilet; 06.12.2010 в 13:46.
GunSmoker вне форума Ответить с цитированием
Старый 06.12.2010, 10:53   #14
Neoteric
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 23
По умолчанию

GunSmoker, немного не так выразил свою мысль. Сверял значение pid, получаемое в программе, с winspy'ем.

Ваш код тоже ругается на выделение памяти, с ошибкой 5(access denied)

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


Процесс, нет не антивирь, так что сильной защиты быть не должно, если вообще какая-то есть
Neoteric вне форума Ответить с цитированием
Старый 06.12.2010, 12:10   #15
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

А разрядность процессов-то совпадает?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 06.12.2010, 12:19   #16
Neoteric
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 23
По умолчанию

Походу дела - нет

Хотя нет, Дельфи же генерит 32х разрядные приложения? и нужный мне процесс тоже 32х разрядный

Последний раз редактировалось Neoteric; 06.12.2010 в 12:36.
Neoteric вне форума Ответить с цитированием
Старый 06.12.2010, 13:44   #17
oleg.v
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 80
По умолчанию

На последок могу предположить что надо выставить права отладки SeDebugPrivilege или чего такого VirtualProtectEx
oleg.v вне форума Ответить с цитированием
Старый 06.12.2010, 13:51   #18
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Называйте процесс тогда. Явно видно, что кто-то сторонний мешает.

Цитата:
Сообщение от oleg.v Посмотреть сообщение
На последок могу предположить что надо выставить права отладки SeDebugPrivilege или чего такого VirtualProtectEx
Тогда бы проваливался бы OpenProcess, а не VirtualProtectEx.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 06.12.2010, 14:34   #19
Neoteric
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 23
По умолчанию

Да процесс нестандартый. Есть такая игровая платформа гарена. Процесс соответсвено garena.exe
Neoteric вне форума Ответить с цитированием
Старый 06.12.2010, 16:41   #20
oleg.v
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 80
По умолчанию

Ну тебе на wasm или cracklab. Там видел пару таких тем про гарену.
oleg.v вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка доступа памяти, при работе с принятой строкой. Zeraim Работа с сетью в Delphi 11 26.01.2010 01:11
Ошибка доступа к памяти AzoTik Общие вопросы Delphi 6 22.01.2010 10:17
Ошибка: Нарушение доступа к памяти. VladimirAleks Общие вопросы Delphi 6 03.11.2009 14:42
Как программно нажать клавишу в чужом процессе? Sere0ga Win Api 2 27.03.2007 18:43