• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Определение объёма памяти

  • Автор темы babreonok
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

babreonok

Уважаемые делфятники, помогите бетному студенту!!!! :)
Я запускаю программу (консольную) с помощью функции CreateProcess. Как узнать сколько запущеная программа потребовала для хранения всех своих переменных???
Заранее благодарен.
 
G

garrymax

Этот вопрос не в дельфинарии надо задовать, а тем, кто работает на Assembler и с API. Знаю только, что для EXE-шника выделяется память по его заголовку в поле IMAGE_DATA_DIRECTORY (это условное название и смещение я не помню), а для выделенного процесса параметры памяти выдает функция VirtualQuery - нарисуй ее в редакторе Delphi и нажми <F1> - хелп должен дать описание.

Отправил, но забыл вписать ссылку - тут уже сам разбирайся.
 
Z

zubr

Код:
uses psAPI;

procedure TForm1.Button1Click(Sender: TObject);
var 
pmc:PPROCESS_MEMORY_COUNTERS;
begin
GetMem(pmc, SizeOf(_PROCESS_MEMORY_COUNTERS));
pmc.cb:=SizeOf(_PROCESS_MEMORY_COUNTERS);
If GetProcessMemoryInfo(GetCurrentProcess(), pmc, pmc.cb) then
Application.MessageBox(PChar(IntToStr(pmc^.WorkingSetSize)+' Bytes'),
'Memory', MB_OK or MB_ICONINFORMATION)
else
Application.MessageBox('Unable to retrieve memory usage structure',
'Memory', MB_OK or MB_ICONINFORMATION);
FreeMem(pmc);
end;
 
G

garrymax

Код:
 If GetProcessMemoryInfo(GetCurrentProcess(), pmc, pmc.cb)
Спасибо Zubr и от меня - в дельфи и в книгах API от мелкософта описание этой функции нет - решил полазить по сети и нашел интересную статью - GetProcessMemoryInfo выдает не точную информацию: есть функция NtQuerySystemInformation со своей структурой (пример структуры в той же статье), которая выдает реальный размер памяти - больше, чем показывает GetProcessMemoryInfo. А если GetProcessMemoryInfo то проще использовать GetProcessWorkingSetSize(GetCurrentProcess(),memMin,memMax); (переменные DWORD смысл по их именам), но они как раз из заголовка EXE-файла для SetProcessWorkingSetSize(толко недавно узнал). Теперь буду знать еще один более простой путь.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!