Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Програмка для тестирования памяти, алгоритмы есть 
:(
    Опции темы
ST_Falcon
Дата 20.3.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



Нужно очень быстро сделать элементарную програмку для тестирования памяти. Есть куча алгоритмов... И все. Не знаю что делать дальше smile.
Посмотрел функции ВинАпи для работы с памятью... Очень скудный наборчик...
Кто что посоветует?
PM MAIL ICQ   Вверх
p0s0l
Дата 20.3.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Если иметь права админа, то можно юзать секцию PhysicalMemory, с помощью которой можно получить доступ к физической памяти...
Вот небольшой примерчик:
Код

uses JwaWinType, JwaWinBase, JwaWinNT, JwaAclApi, JwaAccCtrl;

const
  PhysMemDevName = '\Device\PhysicalMemory';

  PhysMemName : UNICODE_STRING = (
    Length        : Length(PhysMemDevName) * SizeOf(WideChar);
    MaximumLength : Length(PhysMemDevName) * SizeOf(WideChar);
    Buffer        : PhysMemDevName;
  );

  PhysMemAttr : TObjectAttributes = (
    Length                   : SizeOf(PhysMemAttr);
    RootDirectory            : 0;
    ObjectName               : @PhysMemName;
    Attributes               : OBJ_CASE_INSENSITIVE;
    SecurityDescriptor       : nil;
    SecurityQualityOfService : nil;
  );

  FullAccess : EXPLICIT_ACCESS = (
    grfAccessPermissions : SECTION_ALL_ACCESS;
    grfAccessMode        : GRANT_ACCESS;
    grfInheritance       : NO_INHERITANCE;
    Trustee : (
      pMultipleTrustee         : nil;
      MultipleTrusteeOperation : NO_MULTIPLE_TRUSTEE;
      TrusteeForm              : TRUSTEE_IS_NAME;
      TrusteeType              : TRUSTEE_IS_USER;
      ptstrName                : 'CURRENT_USER';
    );
  );

function NtOpenSection(SectionHandle: PHANDLE; DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall; external 'ntdll.dll' name 'NtOpenSection';

procedure TForm1.FormCreate(Sender: TObject);
var
  hSection : THandle;
  MappedAddress : Pointer;
  Adr : PByte;
  PhysicalAddress, MemorySize : Int64;
  Size : DWORD;
  SectionAcl : PACL;
  Errors : integer;
  i : integer;
  b1, b2, b3 : byte;

begin
// разрешаем полный доступ к секции
  NtOpenSection (@hSection, WRITE_DAC, @PhysMemAttr);
  SetEntriesInAcl (1, @FullAccess, nil, SectionAcl);
  SetSecurityInfo (hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, SectionAcl, nil);
  CloseHandle (hSection);
  LocalFree (Cardinal(SectionAcl));

// открываем секцию на чтение и запись
  NtOpenSection (@hSection, SECTION_MAP_READ or SECTION_MAP_WRITE, @PhysMemAttr);

  PhysicalAddress := 0;       // Физ. адрес начала сканирования
  MemorySize := 1*1024*1024;  // Размер проверяемой памяти (1 мегабайт)
  Size := 4096;               // Размер отображаемой области (1 страница)
  Errors := 0;                // Кол-во ошибок

  repeat
// Проецируем физ. область памяти в виртуальное пространство процесса
    MappedAddress := MapViewOfFile(hSection, SECTION_MAP_READ or SECTION_MAP_WRITE, PhysicalAddress shr 32, Cardinal(PhysicalAddress), Size);

    Sleep (0);
    Adr := MappedAddress;
    for i := 0 to Size-1 do
    begin
      b1 := Adr^;         // читаем байт
      Adr^ := b1 xor $FF; // записываем инвертированное значение
      b2 := Adr^;         // читаем байт
      Adr^ := b1;         // записываем исходный байт
      b3 := Adr^;         // читаем байт

      if (b1 <> b3) or (b2 <> (b1 xor $FF)) then Inc(Errors);
      Inc (Adr);
    end;

    UnmapViewOfFile (MappedAddress);
    Inc (PhysicalAddress, Size);
  until PhysicalAddress >= MemorySize;

  CloseHandle (hSection);

  ShowMessage ('Обнаружено ошибок: ' + IntToStr(Errors));
end;


Мне не охото было выдирать определения типов и констант... Поэтому скачай Jedi WinAPI...


--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 20.3.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Перенесенно из раздела Delphi


--------------------
С уважением, г-н Посол.
PM   Вверх
ST_Falcon
Дата 21.3.2005, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



p0s0l
это на всю память? или только на свободную? если только на свободную, то что делать с памятю которую занимает ося??
PM MAIL ICQ   Вверх
p0s0l
Дата 21.3.2005, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Это физическая память - то бишь тут и занятая и не занятая...
А чего с ней делать ? Тестировать smile
Иначе что за тест такой будет, который не всю память шарит ?...


--------------------
С уважением, г-н Посол.
PM   Вверх
FDum
Дата 26.11.2012, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 26.11.2012

Репутация: нет
Всего: нет



Ребят можете рассказать как это все скомпилировать.
мне задали курсовой на делфях,
а я даже не знаю с какой строки начинается написание программ в Delphi(
PM MAIL   Вверх
northener
Дата 27.11.2012, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(FDum @  26.11.2012,  17:17 Найти цитируемый пост)
Ребят можете рассказать как это все скомпилировать.
мне задали курсовой на делфях,
а я даже не знаю с какой строки начинается написание программ в Delphi( 

Для решения курсовых и прочих учебных задач есть Центр помощи.

Это сообщение отредактировал(а) bems - 28.11.2012, 00:44


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.