2016-05-22 7 views
0

Используя этот способ, я могу получить правильное значение, но я хотел бы получить пример того, как читать память моего собственного процесса без использования ReadProcessMemory.Прочитайте память моего собственного процесса без использования ReadProcessMemory

var 
    Modulo : HMODULE; 
    Value1, Value2, Read : Cardinal; 
    GetWindowTextAAPI: function (hWnd: HWND; lpString: PChar; nMaxCount: integer):integer; stdcall; 
begin 
    Modulo := GetModuleHandle('user32.dll'); 
    if (Modulo <> 0) then 
    begin 
    @GetWindowTextAAPI := GetProcAddress(Modulo, 'GetWindowTextA'); 
    if (@GetWindowTextAAPI <> nil) then 
    begin 
     ReadProcessMemory(GetCurrentProcess, Pointer(@GetWindowTextAAPI), Addr(Value1), 4, Read); 
     ReadProcessMemory(GetCurrentProcess, Pointer(DWORD(@GetWindowTextAAPI)+4), Addr(Value2), 4, Read); 
     ShowMessage(
     IntToStr(Value1) 
     + ' ' + 
     IntToStr(Value2) 
    ); 
    end; 
    end; 
end; 

Как правильно использовать функцию CopyMemory?

+0

'Assert (PDWORD (@GetWindowTextAAPI)^= Value1)'. Я не уверен, что понимаю ... –

+1

Добро пожаловать в StackOverflow! Не создавайте новую учетную запись для каждого из [ваших вопросов] (https://stackoverflow.com/users/6365505). Похоже, вы заинтересованы в подключении API. Правильно ли это? –

+0

@SertacAkyuz возвращает ошибку утверждения. – 0x4

ответ

0

Вам нечего делать, чтобы читать память из вашего собственного процесса. Это то, что ваша программа уже делает все время. Вам, конечно, не нужно ReadProcessMemory. Вместо этого вы просто разыскиваете указатель.

Поскольку она не выглядит, как вы заинтересованы в вызова функции API, вы можете начать упрощая объявление функции-указателя:

var 
    GetWindowTextAAPI: PDWord; 

Затем присвоить указатель и считывать значение :

GetWindowTextAAPI := GetProcAddress(Modulo, 'GetWindowTextA'); 
Value1 := GetWindowTextAAPI^; 
+0

Он работал правильно, но не возвращает правильное значение, если я использую + 0x4 (битBltAPI^+ 4), как продолжить? – 0x4

+0

Как обычно, Delphi требует, чтобы ваш код был синтаксически правильным. –

+0

Моя текущая попытка IntToStr (BitBltAPI^+ 4) Это не работает, как мы будем правы? – 0x4

 Смежные вопросы

  • Нет связанных вопросов^_^