Есть программа,которая просто выводит MessageBox.Точка входа - 401000.Последний адрес,что вырисовывает отладчик ollydbg - 00401FFF,но в Executable Modules в столбце Size написано 4000,но 401FFF-401000 = FFF = DEC('FFF') = 4095 байт в десятичной системе...Куда девались ещё 95 байт ? Бывают ли случаи,когда ollydbg не может определить физические размеры модуля ? Как визуально определить границы модуля ? Когда я открываю программу в отладчике,я сразу попадаю в модуль ntdll.dll,но,нажав пару раз F9,я вернулся в свой модуль...Почему я сразу не попадаю в *свою* программу ? Ведь я не использовал функций этой библиотеки. Хотелось бы получить ответы на эти вопросы(.
Это как анекдот про чемоданы Ноль - тоже адрес. У проекции есть два размера - физический и виртуальный, сформированный гранулярностью памяти.
В столбце Size размер указан в hex-виде, т.е. 4000h = 16384 байт, т.е. 4 страницы по 1000h = 4К. Одна страница под PE-заголовок, и по одной странице на секции кода, данных и импорта. А в основном окне CPU Оля ес-но "вырисовывает" только секцию кода Кликаешь View->Memory и получаешь карту памяти всего процесса со всеми модулями. В колонке Owner находишь имя своей проги и в колонках Section и Contains видишь сколько и каких секций она содержит. Для более полной инфы выделяешь первую строчку с PE header и по правому клику жмешь Dump - полное описалово PE-заголовка, в котором можешь найти и Size of Image и много чего еще. Ты попадаешь на системную точку останова, котрая позволяет отладчику поставить брик на точку входа или любое другое место в твоей проге. Или просто жми F9 и попадешь на точку входа своей проги, или же, если тебя это напрягает, зайти в Debugging Options и на вкладке Events переключи первый останов с системного брика на Entry point