Работа с памятью в Делфи

Тема в разделе "WASM.BEGINNERS", создана пользователем crashX, 11 июн 2010.

  1. crashX

    crashX New Member

    Публикаций:
    0
    Регистрация:
    11 май 2010
    Сообщения:
    2
    Приветствую. Какой конструкцией языка можно прочитать указанную область собственной памяти (приложения) без использования ReadProcessMemory?
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    ппц.
    это не форум по синтаксису дельфи,
    спросите у F1
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Нету таких конструкций и быть не может. Надо использовать ассемблерную вставку или ещё что в этом роде.
     
  4. crashX

    crashX New Member

    Публикаций:
    0
    Регистрация:
    11 май 2010
    Сообщения:
    2
    Не подскажите как эта вставка может выглядеть?
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Что значит "прочитать" ?!
    Если просто скопировать в буфер, то через Move. Если с преобразованием в Hex-строку, то через BinToHex. Если просто прочитать в переменную, то через тайпкастинг указателя, например i:=pInteger(Address)^ и т.д. и т.п.
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Если читать одиночные байты/слова/двойные слова нужно -- проще написать простейшую функцию, используя приведение типов, как показал leo. Если нужно что-то более сложное, там уже может иметь смысл полноценное использование асма. От задачи, в общем, зависит.

    Код (Text):
    1. function ReadByte(Addr : Cardinal) : Byte;
    2. begin
    3.   Result:= PByte(Addr)^;
    4. end;
    В общем, обычное использование указателей и приведения типов, никаких специальных конструкций доступа к памяти -- их попросту не существует в сколько-нибудь современных языках общего назначения.
     
  7. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    var
    temp:lol: WORD;
    asm
    push eax
    mov eax,[addr]
    mov temp,eax
    pop eax
    end;
     
  8. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    SII
    [q]Если читать одиночные байты/слова/двойные слова нужно -- проще написать простейшую функцию[/q]
    А ещё эту функцию стоит определить как inline, если версия Delphi достаточно свежая, иначе накладные расходы на вызов функции превысят и время работы и размер полезной части. Но я для этого дела используют простое PByte(адрес)^.
     
  9. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    CyberManiac
    Угу, но это уже детали. А постоянное использование приведения-разыменования загромождает текст и ухудшает читаемость, почему я его не люблю.