Статьи Королевства Дельфи


Введение - часть 6


  • Pointer; ссылка на величину записи
  • TByteArray = array of Byte; массив байт неограниченной длины
  • String; длинная строка
  • В итоге я приведу полный код примера, в котором требуется записать в память процесса число по локальному адресу 100: …

    const Value: Int64 = 1000; var LocalAddress, Start: Integer; MemoryInspector: TMemoryInspector; Stream: TMemoryStream; begin MemoryInspector := TMemoryInspector.Create(Self); MemoryInspector.Parent := Self; with MemoryInspector do begin // Получаем информацию обо всех процессах и их окнах: UpdateWndData; // Выбираем самый первый процесс: Selected := 0; // Устанавливаем адрес: LocalAddress := 100; // Получаем блок памяти: GetMemoryRegion(LocalAddress); // Устанавливаем начало записи: Start := LocalAddress - Beginning; // Запись: WriteInt64(MemoryRegion, Start, Beginning, Value); // Память процесса можно загрузить в поток и сохранить в файл: Stream := TMemoryStream.Create; try StreamRef := Stream; PeekData; Stream.SaveToFile('stream.dat'); finally Stream.Free; end; end; …

    Простые методы записи

    Второй метод записи был только что подробно рассмотрен. Теперь пришла очередь описать первый метод, наиболее простой. Он работает немного медленнее предыдущего, но все же обладает некоторым преимуществом. Представьте себе ситуацию, вы собираетесь записать число размером, скажем 10 байт. Тот блок, в котором будет производиться запись, имеет размер, например 4096 байт, запись начинается с 4092 байта. Получается, что в регион может быть записано только 4 байта, а нужно записать 10 байт. Функции второго типа, которые были рассмотрены в предыдущей главе, в такой ситуации запишут только 4 байта из 10. Функции первого типа ведут себя иначе и в рассматриваемой ситуации сначала найдут следующий блок памяти, запишут в него неуместившиеся 6 байт, после чего запишут первые 4 байта в исходный блок памяти. Ниже приведен список функций первого типа:

    • function Write(LocalAddress: Longword; Buffer: TShareBuffer; Length: Longword = 0): Boolean; overload; virtual;
    • function WriteByte(LocalAddress: Longword; Value: Byte): Boolean; overload; virtual;
    • function WriteWord(LocalAddress: Longword; Value: Word): Boolean; overload; virtual;
    • function WriteLongword(LocalAddress: Longword; Value: Longword): Boolean; overload; virtual;
    • function WriteInt64(LocalAddress: Longword; Value: Int64): Boolean; overload; virtual;
    • function WriteSingle(LocalAddress: Longword; Value: Single): Boolean; overload; virtual;
    • function WriteDouble(LocalAddress: Longword; Value: Double): Boolean; overload; virtual;
    • function WriteExtended(LocalAddress: Longword; Value: Extended): Boolean; overload; virtual;
    • function WriteString(LocalAddress: Longword; Value: ShortString): Boolean; overload; virtual;
    • function WriteBuffer(LocalAddress: Longword; Value: Pointer; Length: Longword): Boolean; overload; virtual;
    • function WriteBuffer(LocalAddress: Longword; Value: TByteArray): Boolean; overload; virtual;
    • function WriteBuffer(LocalAddress: Longword; Value: string): Boolean; overload; virtual;



    • Начало  Назад  Вперед



      Книжный магазин