Сейчас на форуме: CDK123, zds, tyns777, tihiy_grom, morgot, rmn (+5 невидимых)

 eXeL@B —› Программирование —› Работа с замапллеными в память файлами
Посл.ответ Сообщение

Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 06 декабря 2008 23:43
· Личное сообщение · #1

Вопрос глупый, может это сказывается 23;38 и завтра может буду стыдиться, но хочется вопрос знать уже сейчас ;)))

Итак, допустим есть файл размером в 0x323 байт, и его файл-маппит приложение через CreateFileMapping -> MapViewOfFile -> pDOS

Вопрос: если мы возьмем и напишем цикл:

Code:
  1. DWORD i =0;
  2. while(true)
  3.   pDOS[i++] = 0xCC;


то на каком значении "i" может обломиться прога ? И почему обломиться ?

ЗЫ:
У мну смутные догадки что прога в какой-то момент начнет писать чужую область памяти ? Но моя MS Visual Studio 2008 TS чего-то заглючила и проверить не могу (, может из-за пива, завтра разберусь почему )))

-----
My love is very cool girl.




Ранг: 35.0 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 07 декабря 2008 00:33 · Поправил: sniper
· Личное сообщение · #2

theCollision
вылетит за пределы выделенной страницы (0x1000 байт) и будет ексепшн..



Ранг: 10.2 (новичок)
Активность: 0=0
Статус: Участник

Создано: 08 декабря 2008 13:02
· Личное сообщение · #3

Значение i, начиная с которого может произойти исключение ACCESS_VIOLATION (0xC0000005) определяется в данном случае типом указателя pDOS (DWORD*,WORD*,CHAR*?), т.е. тем по скольку байт увеличивается сдвиг, и размером маппируемой области. Если я правильно помню, маппирование идет блоками по 64Кб, т.е. опасное i = floor(65535 / sizeof(*pDOS)) + 1 = 16384 при размере указателя 4 байт. Только это опасное но не 100% вызывающее исключение значение. Вполне вероятно, что в адресном пространстве приложения в следующей за меппингом страницей памяти находятся данные приложения, доступные на запись. Это может быть область стека другого потока или область глобальных переменных. В общем случае результат непредсказуем.


 eXeL@B —› Программирование —› Работа с замапллеными в память файлами
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати