Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение Integer из памяти процесса [D5, WinXP]


PHN ©   (2002-10-21 18:32:00) 

Многоуважаемый, All!
Поведай про сабж, а именно читаю по адресу где точно должно быть число которое мне заранее известно, но ReadProcessMemory возвращает бред! Читаю так:

//pto,num - dword
//res - integer
pto:=$00B6572C;
ReadProcessMemory(PID,ptr(pto),@num,4,numread);
res:=num;


Бест регардс!


Digitman   (2002-10-25 14:47:00) [1]


> Ну такая она, знаю, и все!
> Что там число! :))



Ну откуда знаешь-то ? Что, великая тайна что ли ?
Или по файлу шарил каким-нить hiew или SoftICE ? И там типа "знакомые буквы" нашел ?)


paul_shmakov   (2002-10-25 14:41:00) [2]

и где код?


Игорь Шевченко   (2002-10-25 14:05:00) [3]


> ластеррор нулю не равен( это не нормально?).


А чему же он равен ?


PHN   (2002-10-25 13:55:00) [4]

Ну такая она, знаю, и все!
Что там число! :))


Digitman   (2002-10-25 10:59:00) [5]


> Может собственно это и не интегер, но тогда как можно узнать
> об этом?


А откуда вообще взялась вот эта константа ? На основании чего ты опираешься именно на данное ее значение, а не на какое-то другое ?

pto:=$00B6572C; // ?????????


PHN   (2002-10-25 10:01:00) [6]

up


PHN   (2002-10-23 23:40:00) [7]

Функция возвращает число даоекое от правды, читаю из игры, ластеррор нулю не равен( это не нормально?). Может собственно это и не интегер, но тогда как можно узнать об этом?
Еще скажу, до этого пуская цикл для pto (см исх код выше), за где-то от B630A0 до B6572C, то дойдя до конечного адреса и считав из него функция возвращала совершенно ворное значение, стоит только читать напрямую из адреса(B6572C), как уже нечто иное, эту для меня загадку я решить не смог.
Буду благодарен, если кто-нибудь скинет мне на Mail рабочий исходник с похожей задачей.

Вот это собственно и значит то самое: "Что-то не совсем работает :("


paul_shmakov   (2002-10-23 14:13:00) [8]

"Что-то не совсем работает :("
что можно на этоответить?
1) ваш код
2) что в нем конкретно не работает?
3) что возвращают функции?
4) если функции сигнализаруют о неудачном завершении, то что говорит GetLastError?
5) из какого процесса идет чтение?


PHN   (2002-10-23 13:44:00) [9]

Что-то не совсем работает :(
А права для чтения и без того открыты( это на счет VirtualQueryEx)


paul_shmakov   (2002-10-22 16:54:00) [10]

1) первый параметр не process id, а process handle. используйте OpenProcess(pid, false, PROCESS_VM_READ).
2) а второй @pto.


Ihor Osov'yak   (2002-10-22 00:51:00) [11]

с первого взляда в msdn

BOOL ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress,
LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead);

Parameters


lpBaseAddress

Pointer to the base address in the specified process to be read. Before any data transfer occurs, the system verifies that all data in the base address and memory of the specified size is accessible for read access. If this is the case, the function proceeds; otherwise, the function fails.


возникает подозрение, что нужно не ptr(pto), а @(pto) ...

Во вторых, проверь GetLastError - возможно нет соотв. прав на соотв. область памяти (тогда поможет VirtualQueryEx + VirtualProtectEx)

ЗЫ. Относительно первого - (если GetLastError все ок) - относительно просто проверить софтайсом - читаем ли мы с адреса
$00B6572C или с ($00B6572C)^ ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо