Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация

вопрос delphi -> ReadProcessMemory + Double - как вывести?

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 22.06.2016, 17:25   #1
 Разведчик
Аватар для doneto23
 
doneto23 никому не известный тип
Регистрация: 17.06.2016
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
Question вопрос delphi -> ReadProcessMemory + Double - как вывести?

15:39 22.06.2016

Всем здраствуйте.
Прошу помощи.
Возник вопрос. пишу своего бота. вижу в AtrMany и CheatEngine 6.4. нужную ячейку. в CheatEngine при отсеивании и поиске указателя вижу вверху combo_box там можно выбрать тип числа -что мы хотим увидеть и при выборе:

4 byte: 2405181686

а типа double - видим то что и должны видеть ( то что в ячейке лежит )..

double: 2774,88

в делфи у меня получается считывыать ТОЛЬКО тип 4byte. ( исходник ниже )

( т.е на форме лежит лейбл куда пишется то что беру из ячейки памяти). и вижу я там число 4 byte: 2405181686
а в ячейке тестовой программы лежит ( double: 2774,88 ) - и если я его меняю, то и в CheatEngine - число тоже меняется, и если я в CheatEngine меняю тип числа на 4byte - то и вижу тоже что и на своей форме в лейбле... возник вопрос ( ищу уже давно ответ ):

как считать данные типа double.
или каким алгоритмом из числа 4byte = 2405181686
получить число типа double: 2774,88

т.е. как правильно считать из памяти число с плавающей точкой типа double.

------- ниже исходинк делфи ( 2006, winxp_sp3)
форма имеет 2 лейбла и один таймер.
вся инфа выводится в 1-й лебл.
--------------
============ begin source code ============
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
procedure Timer1Timer(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);

var

hWin: hWnd; // для поиска хендла окна
ProcId: cardinal; // для поиска ID процесса
hProc: THandle;

AdressW: dword; // сюда прочитаем адрес из указателя
Adress: dword;
readwrite: Cardinal;

begin

hWin:=FindWindow(nil, 'Frm_1');

if hWin<>0 then

GetWindowThreadProcessId(hWin, @ProcId);

hProc:= OpenProcess(Process_All_Access, False, ProcId);

AdressW:=$46c8e0; //Адрес // правильный - показывает то что надо
label2.Caption := 'Данные в ячейке $46c8e0 сейчас равны: ';

begin

ReadProcessMemory(hProc, pointer(AdressW), @Adress, sizeof(Adress), readwrite); // читаем адрес из указателя

ReadProcessMemory(hProc, pointer(Adress+$4d0), @Adress, sizeof(Adress), readwrite);

ReadProcessMemory(hProc, pointer(Adress+$40), @Adress, sizeof(Adress), readwrite);

ReadProcessMemory(hProc, pointer(Adress+$5d0), @Adress, sizeof(Adress), readwrite);

ReadProcessMemory(hProc, pointer(Adress+$6b4), @Adress, sizeof(Adress), readwrite);

ReadProcessMemory(hProc, pointer(Adress+$2fc), @Adress, sizeof(Adress), readwrite);

end;

//label1.Caption:=intToStr(Adress) ;
label1.Caption := FloatToStr(Adress);

CloseHandle(hProc);

end;

end.
============end source code ============

т.е. данный код нормально читает , но число я вижу не в том формате - как в ячейке...
как вывести число в формате Double с точкой.?

спасибо.
  Ответить с цитированием
Старый 22.06.2016, 18:19   #2
 Разведчик
Аватар для f4lrik
 
f4lrik излучает ауруf4lrik излучает ауруf4lrik излучает ауруf4lrik излучает ауруf4lrik излучает ауруf4lrik излучает ауру
Регистрация: 14.02.2016
Сообщений: 2
Популярность: 557
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 3 сообщениях
Отправить сообщение для f4lrik с помощью Skype™
 
По умолчанию Re: вопрос delphi -> ReadProcessMemory + Double - как вывести?

Используйте тип Single, если значение в памяти занимает четыре байта. Сначала нужно считать данные в массив из четырёх байт, а затем просто использовать
s := Single(arr);
  Ответить с цитированием
Старый 23.06.2016, 11:28   #3
 Разведчик
Аватар для doneto23
 
doneto23 никому не известный тип
Регистрация: 17.06.2016
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: вопрос delphi -> ReadProcessMemory + Double - как вывести?

Цитата:
Сообщение от f4lrikПосмотреть сообщение
Используйте тип Single, если значение в памяти занимает четыре байта. Сначала нужно считать данные в массив из четырёх байт, а затем просто использовать
s := Single(arr);

Спасибо за ответ. Вы могли бы привести небольшой пример?
Или ссылку на работающий исходник.?
  Ответить с цитированием
Старый 25.06.2016, 02:47   #4
 Разведчик
Аватар для doneto23
 
doneto23 никому не известный тип
Регистрация: 17.06.2016
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: вопрос delphi -> ReadProcessMemory + Double - как вывести?

Всем спасибо. Решение нашел. Подсказали на форуме
[Ссылки могут видеть только зарегистрированные пользователи. ]
Там решение этого вопроса. Спасибо всем кто учавствовал.
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ReadProcessMemory Delphi 7 SsEnder Общение разработчиков 2 23.08.2013 03:43

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:49.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net