Вопрос по хранению переменных в памяти.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Вопрос по хранению переменных в памяти.

Сообщение Ruslan2000 » 17.11.2007 (Сб) 15:18

Hi all.

В процессе написания процедуры, которая ищет число в памяти другого процесса возникла следующая проблемка:

Для отладки процедуры написал маленький тестовый процесс:

Public numb As Double

Sub Main()
numb = 123456789
MsgBox Hex(numb)
End Sub

сделал еxe.

Далее при помощи утилиты т-searsh ищем число 123456789 и адресс где это хранится.

Насколько я понимаю число 123456789 в формате Double должно в памяти выглядеть примерно так:
15 CD 5B 07 00 00 00 00

В формате float : A3 79 EB 4C 00 00 00 00

Когда открываешь hex editor по найденному адресу, видишь какойто сакс. Непонятно как образующийся.

Для поиска значения в памяти мне надо задавать правильную последовательность байт, представляющую значение переменной так как оно выглядит в памяти.
Может кто поясниn как это правильно преобразовать? (из десятичн формата в формат в котором оно хранится в памяти процесса).
Вложения
дамп.JPG
дамп.JPG (171.07 Кб) Просмотров: 351

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.11.2007 (Сб) 16:27

1) Ты понимаешь, что ты в своём "тестовом" процессе используешь Variant.

2) Ты понимаешь, что в АП процесса последовательность байт "5 CD 5B 07 " может встречаться много где, например в коде.

Может кто поясниn как это правильно преобразовать? (из десятичн формата в формат в котором оно хранится в памяти процесса).

Из строкового десятичного представления числа сконвертировать в тот вид, в котором число хранистя в памяти помогут функции CLng, CSng, CDbl, CByte в зависимости от типа переменной.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Сообщение Ruslan2000 » 17.11.2007 (Сб) 17:49

2) Нету такой последовательности в этом процессе, в том то и дело. Я чейку с числом tsearsh находит правильно, это я проверил изменяя ее значение.

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Сообщение Ruslan2000 » 17.11.2007 (Сб) 18:07

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

Все это записывается хитрее чем просто последовательность от Hex(число). Или я чего-то не доганяю.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.11.2007 (Сб) 18:44

Несуществует внутребейсиковых форматов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Вопрос по хранению переменных в памяти.

Сообщение tyomitch » 18.11.2007 (Вс) 8:55

Ruslan2000 писал(а):Насколько я понимаю число 123456789 в формате Double должно в памяти выглядеть примерно так:
15 CD 5B 07 00 00 00 00

Не должно. Оно так выглядит в формате Long.

Ruslan2000 писал(а):В формате float : A3 79 EB 4C 00 00 00 00

Float -- это 4 байта. Откуда ты взял свои 8 байт, я так и не понял.

Ruslan2000 писал(а):Когда открываешь hex editor по найденному адресу, видишь какойто сакс. Непонятно как образующийся.

RTFM: http://en.wikipedia.org/wiki/IEEE_float
Изображение

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Сообщение Ruslan2000 » 18.11.2007 (Вс) 21:44

Да спасибо я понял - число хранится в формате с плавающей точкой. Оно бывает восьмибайтовое с плавающей точкой (double float).

Вопрос меняется: не попадался ли кому алгоритм перевода чисел с плавающей точкой в шестнадцатеричный формат и наоборот?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.11.2007 (Пн) 7:03

По моей ссылке есть разбитовка всех форматов.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList  
cron