forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Поинтеры. (http://forum.boolean.name/showthread.php?t=20747)

Rzonex 23.11.2018 16:48

Поинтеры.
 
Добрый день.

Мне в функцию приходит извне 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 но это жуткие костыли, помогите сделать красиво...

Rzonex 23.11.2018 18:51

Ответ: Поинтеры.
 
Апну

Randomize 24.11.2018 16:23

Ответ: Поинтеры.
 
Цитата:

Сообщение от Rzonex (Сообщение 315816)
т.е сделать обратную операцию от varptr

Просто ptr?

Rzonex 24.11.2018 16:41

Ответ: Поинтеры.
 
Ошибка - ожидается выражение, а найден 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

Randomize 24.11.2018 20:38

Ответ: Поинтеры.
 
Надо указать тип того, на что указывает поинтер, это есть в официальной документации.
Varptr - возвращает адрес памяти а Ptr - возвращает указатель
https://en.wikibooks.org/wiki/BlitzM...guage/Pointers

Rzonex 24.11.2018 21:34

Ответ: Поинтеры.
 
В итоге в 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])

mingw 28.11.2018 01:47

Ответ: Поинтеры.
 
В итоге в 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])


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot