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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2008, 19:49   #1
casper123
 
Регистрация: 15.08.2008
Сообщений: 6
По умолчанию WinApi работа с памятью, помогите!

Мне нужно написать программу, которая бы каждую милисекунду вносила в адресс 02E68994 - значение 10.99 (именно с точкой) , которое содержит 4 байта.

Я поставил на таймер вот такой код:
Код:
Var WindowName : integer;
ProcessId : integer;
ThreadId : integer;
buf : PChar;
HandleWindow : Integer;
write : cardinal;
Const WindowTitle = 'prog test';
Address = $02E68994;
PokeValue = $;
NumberOfBytes = 4;

begin

WindowName := FindWindow(nil,WindowTitle);
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);

GetMem(buf,1);
buf^ := Chr(PokeValue);
WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write);
FreeMem(buf);
CloseHandle(HandleWindow);
end;
А вот какое значение присвоить PokeValue я не знаю .. Там по сути должно быть значение 10.99 в 16-ричной системе , а как оно будет там выглядеть не знаю.

Пожалуйста поправьте мой код и скажите что писать в PokeValue, чтобы этому адресу присваивалось значение 10.99?
casper123 вне форума Ответить с цитированием
Старый 14.09.2008, 20:53   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

$412FD70A;

но проще будет без промежуточных преобразований

Код:
var S:Single;
S := 10.99;
WriteProcessMemory(HandleWindow,ptr(Address),@S,sizeOf(Single),write);
alexBlack вне форума Ответить с цитированием
Старый 14.09.2008, 20:59   #3
casper123
 
Регистрация: 15.08.2008
Сообщений: 6
По умолчанию

Спасибо попробую и так и так, а можешь еще сказать как получил такое число?
casper123 вне форума Ответить с цитированием
Старый 14.09.2008, 21:08   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

type a = array [1..4] of byte;
var S:Single;
S := 10.99;

Точку прерывания и в окне Watch приведение переменной к массиву
a(S) - смотрим побайтно
Изображения
Тип файла: jpg Screen.jpg (12.3 Кб, 133 просмотров)

Последний раз редактировалось alexBlack; 14.09.2008 в 21:30.
alexBlack вне форума Ответить с цитированием
Старый 15.09.2008, 00:22   #5
casper123
 
Регистрация: 15.08.2008
Сообщений: 6
По умолчанию

Не работает Запустил даже артмани для проверки, оффсет сверил, значение остается как было 0.10 , а должно стать 10.99 .. Что может быть не так?

А вот с твоим примером без 16-ричной системы работает

А вот еще, есть еще 1 оффсет с определнным адресом с текстовым форматом, такой вопрос, я знаю, что есть ReadProcessMemory , но а как прочитать это текстовой значение непосредственно, а не набор байт? Заранее спасибо

Последний раз редактировалось casper123; 15.09.2008 в 00:26.
casper123 вне форума Ответить с цитированием
Старый 15.09.2008, 08:13   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от casper123 Посмотреть сообщение
Не работает Запустил даже артмани для проверки, оффсет сверил, значение остается как было 0.10 , а должно стать 10.99 .. Что может быть не так?

А вот с твоим примером без 16-ричной системы работает
buf^ := Chr(PokeValue); // явно не то, что Вы хотели

Цитата:
А вот еще, есть еще 1 оффсет с определнным адресом с текстовым форматом, такой вопрос, я знаю, что есть ReadProcessMemory , но а как прочитать это текстовой значение непосредственно, а не набор байт? Заранее спасибо
Смотря в каком формате.
В общем-то строка и есть набор байт. Читайте в Array of char, потом просто присвоение в строку
alexBlack вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с памятью процесса JRcoker Win Api 10 18.07.2009 22:22
Работа с Socket-ом c помощю WinAPI 69 region Помощь студентам 13 11.04.2008 17:22
Работа с памятью Shurik Hacker Общие вопросы Delphi 7 22.06.2007 20:51
Прямая работа с оперативной памятью Alex_Vlad Общие вопросы Delphi 2 05.12.2006 16:29