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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 03:53   #1
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию Из delphi в c++

Есть код (на делфи):
Код:
var
  ProcessID: DWord;
  ProcessHandle: THandle;
  Mbi: TMemoryBasicInformation;
  Addr: DWord;
  Value, val2, lo: DWord;
  I: Cardinal;
  Buf: PChar;
  BytesRead: DWord;
begin
  ProcessID := 8916;

  value := 43910045;
  val2 := 43910011;

  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);

  if ProcessHandle <> 0 then
    try
      Addr := 0;

      while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do
       begin

         if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then
         begin
           GetMem(Buf, Mbi.RegionSize);
           try

             if ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, Buf,
               Mbi.RegionSize, BytesRead) then
              begin

                for I := 0 to BytesRead - SizeOf(Value) do
                 begin
                   if PDWord(@Buf[I])^ = Value then
                    begin
                      WriteLn('Value ' + IntToStr(Value) + ' found at ' +
                      IntToHex(Integer(Cardinal(Mbi.BaseAddress) + I), 8));

                      WriteProcessMemory(processhandle, pointer(Cardinal(Mbi.BaseAddress) + I), @val2, 4, lo);
                      //showmessage(IntToHex(Integer(Cardinal(Mbi.BaseAddress) + I), 8));
                    end;
                 end;
              end
             else
              WriteLn('Failed to read process memory ' + IntToStr(GetLastError));

           finally
             FreeMem(Buf);
           end;
         end;

         Addr := Addr + Mbi.RegionSize;
     end;

   finally
        CloseHandle(ProcessHandle);
   end
 else
   WriteLn('Failed to open process');

 readln;
end.
Нужно его перенести в C++
Мои наработки:
Код:
#include <windows.h>

int main()
{
	DWORD aaaa = 6020;
	HANDLE process_h;
	process_h = OpenProcess(PROCESS_ALL_ACCESS, 0, aaaa);

	if (process_h != 0)
	{
		DWORD addr;
		MEMORY_BASIC_INFORMATION mbi;
		addr = 0;

		while (VirtualQueryEx(process_h, &addr, &mbi, sizeof(mbi)) != 0)
		{
			if ((mbi.State = MEM_COMMIT) && (mbi.Protect & PAGE_GUARD) != PAGE_GUARD)
			{
				DWORD bytesread, value;
				DWORD *buf = new DWORD[mbi.RegionSize];

				try
				{
					if (ReadProcessMemory(process_h, mbi.BaseAddress, &buf, mbi.RegionSize, &bytesread))
					{
						MessageBoxA(0,0,0,0);
						//for (int i = 0; i < bytesread - sizeof(value); i++)
						//{
						
						//}
					}
					else
					{
						DWORD i = GetLastError();//ERROR 299
					}
				}
				catch(...)
				{
				
				}
				delete[] buf;
				addr += (DWORD)mbi.RegionSize;
			}
		}
	}
	//Sleep(100000);

	return 0;
}
Но тут проблема в том что при ReadProcessMemory - выскакивает ошибка 299 (GetLastError)
Помогите пожалуйста
zotox вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На Delphi 7 сделать игру кто хочет стать миллионером в delphi 7 666dart666 Помощь студентам 11 04.11.2010 17:57
Rad Studio 2011 XE: новое в Delphi, C++ Builder, RadPHP и Delphi Prism savva-paladin Софт 18 02.10.2010 20:24
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54
не StringGrid1.Cells[1,1]:='Delphi'; а вот так SG1.C[1,1]:='Delphi' Nemesisking Компоненты Delphi 7 08.09.2007 03:27