Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 23.11.2018, 13:48   #1
Rzonex
AnyKey`щик
 
Регистрация: 23.11.2018
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Поинтеры.

Добрый день.

Мне в функцию приходит извне byte ptr в котором находится адрес на нужную мне функцию в памяти, приблизительно это выглядит так:

buf1:byte ptr = [искомый адрес функции]
buf2:byte ptr = varptr buf1

теперь в buf2[0], buf2[1], buf2[2], buf2[3] зашит адрес в памяти по которому находится buf1.

Вот этот buf2 мне и приходит в функцию (доступа к самому buf1 нет, он формируется в другом приложении в которое я делаю инжект длл, я привел его для наглядности)

function test(buf2:byte ptr)

как получить buf1? т.е сделать обратную операцию от varptr

Очень долго мучаюсь, единственное что придумал - делать ReadMemory по адресу в buf2 но это жуткие костыли, помогите сделать красиво...
(Offline)
 
Ответить с цитированием
Старый 23.11.2018, 15:51   #2
Rzonex
AnyKey`щик
 
Регистрация: 23.11.2018
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Поинтеры.

Апну
(Offline)
 
Ответить с цитированием
Старый 24.11.2018, 13:23   #3
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: Планета Земля
Сообщений: 4,143
Написано 2,335 полезных сообщений
(для 6,492 пользователей)
Ответ: Поинтеры.

Сообщение от Rzonex Посмотреть сообщение
т.е сделать обратную операцию от varptr
Просто ptr?
__________________
Retry, Abort, Ignore? █
AMD Ryzen 7 1700X x8 3.4Ghz; 16Gb ram; Radeon RX 570
AMD Athlon II x4 2.6Ghz; 8Gb ram; Nvidia Geforce GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 24.11.2018, 13:41   #4
Rzonex
AnyKey`щик
 
Регистрация: 23.11.2018
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Поинтеры.

Ошибка - ожидается выражение, а найден ptr
или я не так понял? Можешь код привести?

Strict
Framework BRL.system
Import BRL.StandardIO
Import BRL.Retro
Global buf1:Byte Ptr = MemAlloc(4)

buf1[0]=1
buf1[1]=2
buf1[2]=3
buf1[3]=4

Global buf2:Byte Ptr = Varptr buf1
Global buf3:Byte Ptr = Ptr buf2
(Offline)
 
Ответить с цитированием
Старый 24.11.2018, 17:38   #5
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: Планета Земля
Сообщений: 4,143
Написано 2,335 полезных сообщений
(для 6,492 пользователей)
Ответ: Поинтеры.

Надо указать тип того, на что указывает поинтер, это есть в официальной документации.
Varptr - возвращает адрес памяти а Ptr - возвращает указатель
https://en.wikibooks.org/wiki/BlitzM...guage/Pointers
__________________
Retry, Abort, Ignore? █
AMD Ryzen 7 1700X x8 3.4Ghz; 16Gb ram; Radeon RX 570
AMD Athlon II x4 2.6Ghz; 8Gb ram; Nvidia Geforce GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 24.11.2018, 18:34   #6
Rzonex
AnyKey`щик
 
Регистрация: 23.11.2018
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Поинтеры.

В итоге в buf3 получается адрес, а не содержимое...
Strict
Framework BRL.system
Import BRL.StandardIO
Import BRL.Retro
Global buf1:Byte Ptr = MemAlloc(4)

buf1[0]=1
buf1[1]=2
buf1[2]=3
buf1[3]=4

Global buf2:Byte Ptr = Varptr buf1
Global buf3:Byte Ptr = Byte Ptr buf2

Print Hex(buf3[0])
Print Hex(buf3[1])
(Offline)
 
Ответить с цитированием
Старый 27.11.2018, 22:47   #7
mingw
Нуждающийся
 
Аватар для mingw
 
Регистрация: 01.01.2016
Сообщений: 89
Написано 45 полезных сообщений
(для 84 пользователей)
Ответ: Поинтеры.

В итоге в buf3 получается адрес, а не содержимое...

Strict
Framework BRL.system
Import BRL.StandardIO
Import BRL.Retro
Global buf1:Byte Ptr = MemAlloc(4)

buf1[0]=1
buf1[1]=2
buf1[2]=3
buf1[3]=4

Global buf2:Byte Ptr = Varptr buf1[0]
Global buf3:Byte Ptr = Byte Ptr buf2

Print Hex(buf3[0])
Print Hex(buf3[1])
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +1, время: 15:42.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com