Приветствую. Какой конструкцией языка можно прочитать указанную область собственной памяти (приложения) без использования ReadProcessMemory?
Нету таких конструкций и быть не может. Надо использовать ассемблерную вставку или ещё что в этом роде.
Что значит "прочитать" ?! Если просто скопировать в буфер, то через Move. Если с преобразованием в Hex-строку, то через BinToHex. Если просто прочитать в переменную, то через тайпкастинг указателя, например i:=pInteger(Address)^ и т.д. и т.п.
Если читать одиночные байты/слова/двойные слова нужно -- проще написать простейшую функцию, используя приведение типов, как показал leo. Если нужно что-то более сложное, там уже может иметь смысл полноценное использование асма. От задачи, в общем, зависит. Код (Text): function ReadByte(Addr : Cardinal) : Byte; begin Result:= PByte(Addr)^; end; В общем, обычное использование указателей и приведения типов, никаких специальных конструкций доступа к памяти -- их попросту не существует в сколько-нибудь современных языках общего назначения.
SII [q]Если читать одиночные байты/слова/двойные слова нужно -- проще написать простейшую функцию[/q] А ещё эту функцию стоит определить как inline, если версия Delphi достаточно свежая, иначе накладные расходы на вызов функции превысят и время работы и размер полезной части. Но я для этого дела используют простое PByte(адрес)^.
CyberManiac Угу, но это уже детали. А постоянное использование приведения-разыменования загромождает текст и ухудшает читаемость, почему я его не люблю.