Возможно ли как-нибудь узнать сколько процесс юзает памяти с точностью до байта? Имеются ввиду все модули и все возможные аллоки в них?
Физической очень сомневаюсь, а виртуальной разве что посчитать, как показывает оллидбг (с точностью до страницы есс-но) http://www.wasm.ru/forum/index.php?action=vthread&forum=3&topic=8437
Ладно, скажем такой вопрос: Код (Text): PROCESS_MEMORY_COUNTERS pmc1,pmc2; pmc1.cb=sizeof(PROCESS_MEMORY_COUNTERS); pmc2.cb=sizeof(PROCESS_MEMORY_COUNTERS); GetProcessMemoryInfo(GetCurrentProcess(),&pmc1,sizeof(PROCESS_MEMORY_COUNTERS)); SomeProc(); GetProcessMemoryInfo(GetCurrentProcess(),&pmc2,sizeof(PROCESS_MEMORY_COUNTERS)); Можно ли утверждать, что процесс после SomeProc() стал юзать на как минимум pmc2.PagefileUsage - pmc1.PagefileUsage байт больше?
Теоретически, если взять во внимание что SomeProc() выполняется час времени (при этом у машины мало физической памяти, но много других важных процессов), то в моменты переключения задач - все не используемые SomeProc() страницы виртуальной памяти могут улететь в своп, возможно - pmc2.PagefileUsage>pmc1.PagefileUsage Если таких проблем с ресурсами не будет и SomeProc() активно обращается к страницам, которые были до этого в свопе, то pmc2.PagefileUsage<pmc1.PagefileUsage Хотя реально (при SomeProc(nop1,nop2....nop10000)) скорее всего будет pmc2.PagefileUsage=pmc1.PagefileUsage Надо учесть, что сами ф-ции определения PagefileUsage могут вызывать из свопа какие-то страницы, тем самым искажая реальный результат, короче что утверждать, я даже не представляю
Возникает при запуске проги на ХР если в РЕ заголовке есть директория resorce и данные в секции зашифрованы - т. е. невозможно прочитать сруктуру ресурсов. Вот таккие приколы однако бывают.
Люди кто знает есть официальные даные про разнице в загрузке программ между виндами. Дело в том что я тут нарвался на интересый эфект WinME и WinXp при запуске проги проверяют секцию с ресурсами и вроде пытаются кешировать картинки. Это проявляется таким образом. - вопервых если зашифровать ресурсы то XP пишет "Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично" - воторых если директорию ресурсов в заголовок вписывать после рапаковки секции с ресурсами на ME битмап невидно Как бы это обойти, в смвсле чтобы и секцию ресурсов шировать и прога загружалась?
S_T_A_S_ Спасибо я примерно догадывался для чего нужны ресурсы, но теперь знаю точно. Интересно вот что если криптонуть секцию ресурсов(в .ехе) то на многих виндах проблемы небудет - только иконка небудет видна и все. Запускается нормально. Но если этот файл запукать на ME или XP возникают проблемы. Вопрос: Почему это может происходить, ведь программа в коде вызывает LoadIcon, LoadString, LoadMenu и тд. когда ресурсы уже распакованы?
bober При отображении PE из заголовка много чего куда читается и потом берётся из внутренних буферов виндоса. Всё это разумеется недокументировано (за исключением NT и 2K . Поэтому умный UPX ресурсы не трогает.
S_T_A_S_ А если нужно добиться того чтобы весь файл изменился? Если винда прочитала файл с диска и какие-то его участки засунула в память - это должно же где-то зафиксироваться, типа объектов принадлежащих процесу? Кто-нибудь что подскажет может винду обмануть можно?
bober > Можно попробовать раелизовать для него свой загрузчик, взамен системного. > Где-нибудь в недокументированных структурах ядра.
Если я не ошибаюсь, то это может возникнуть, когда ты попросил прочитать больше байт, чем доступно. Например, ты сначала вызвал VirtualAlloc(Ex) и попросил выделить 1 страницу, а потом вызвал ReadProcessMemory и попросил прочитать 2 страницы.
S_T_A_S_ Появилась идея - захучить функции которые вылетают. Какие-нибудь возражения(в смысле в чем может быть проблема) есть?
Ура половину проблемы решил. Делаем хук на LoadImage и LoadBitmap. В обработчике: - по дереву ресурсов находим ресурс - делаем CreateDIBitmap На ME уже срабатывает на остальное пока неготово. Хитрость в том что стандартные функции ищут ресурсы в кеше а я буду перенаправлять поиск на файл. Надеюсь что это му-му относится только картинкам.