![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
|
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
Т. е. протектор загружается загрузчиком программ, проделывает нужные операции... А дальше что? Программа-то должна загрузиться загрузчиком программ, чтобы тот сделал все нужные выводы, сообщил о чем надо Windows etc.
|
|||
|
||||
rodnover |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: 2 Всего: 10 |
типа такого:
оригинальная программа
Загрузчик делает обертку над программой, пакует, кодирует и получается такой псевдокод:
Грубо, конечно, но примерно так. |
||||
|
|||||
maydjin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Не совсем верно, а про оптимизацию совсем не верно. Базовый адрес записываеться компоновщиком на этапе сборки программы, и может быть изменен соответсвующими опциями оного. На самом деле это не совсем адрес - это смещение относительно начала виртуально адресного пространства, которое у каждого процесса своё. Не знаю точно как всё дело происходит под linux и другие платформы (хотя думаю существенных отличий нет), а под win это выглядит примерно так: 1. Загрузчик получает уведомление о запуске нового процесса 2. Загрузчик вызывает менеджер памяти, который выделяет под x32 2^32 под x64 2^64 байт виртуальной памяти процессу(за предоставление этой памяти отвечае страничный мененджер). Процессу по умолчанию доступна только половина адресного пространства, доступ к второй половине вызовет ошибку, т.к она доступна только ядру. 3. Загрузчик считывает pe заголовок и размещает в виртуальном адресном пространстве код и статические данные. 4. Ядро создает основной поток процесса выделяя память под стек относительно адреса базы, при том на сколько я помню начало стека будет как раз этим самым базовым адресом.(Тут не совсем уверен - нет под рукой отладчика если базовый адресс не адрес начала стека, то это адрес первой инструкции кода основного потока) 5. Управление передаеться программе Подробней почитать/спросить можно на вышеупомянутом сайте wasm.ru. Не совсем уверен за п4 но если посмотреть адреса локальных переменных в основном потоке то похоже на правду. Главный мессадж моего топика : Да программа всегда загружаеться по базовому адресу. Но этот адрес расположенн в виртуальном адресном пространстве, т.е физический адрес на 99,9999......% будет каждый раз новый(ну по крайней мере примерно первые <количество dword в вашей оперативной памяти> запуска под win32 ![]() Прошу прощения если есть какие нибудь неточности, но основную мысль надеюсь передал верно. Это сообщение отредактировал(а) maydjin - 17.8.2011, 21:06 |
|||
|
||||
rodnover |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: 2 Всего: 10 |
по пункту 4му - точно не верхушку стека указывает. Адреса и размеры сегментов ниже прописываются.
|
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
Спасибо за ответы, но сейчас я пытаюсь разобраться со стеками. И, признаться, не могу перевести некоторые фрагменты:
О каких распечатанных кружках-досках идет речь? о_О Добавлено через 54 секунды (да-да, это не информация о стеке, но изучая стеки, я вдруг обнаружил, что не понимаю термин ЦПУ). |
|||
|
||||
rodnover |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: 2 Всего: 10 |
Если я не ошибаюсь, то printed circuit boards переводится как печатная плата.
|
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
Hagrael, позволь дать совет, во-первых тебе нужно изучать линукс.. вижу твою тягу к системному программированию (или по крайней мере к изучению работы ОС) - линукс для этого подходит как нельзя лучше.. он открыт, под него довольно просто писать свои драйверы, есть и документация, и куча примеров.. во-вторых начни с книги "Разработка ядра Linux" (Роберт Лав).. ее можно купить или скачать в сети.. - очень простым языком описанно как работает ОС из каких подсистем она состоит и т.д.. там есть и сравнение винды и линукса, так что это тебе будет в любом случае интересно..
целенаправленно сядь и прочитай книжку.. -------------------- undefined |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Приблизительный перевод: Центральный процессор (CPU), это часть компьютерной системы который обеспечивает выполнение инструкций компьютерной программы. Выполняет основные арифметические, логические операции и операции ввода/вывода. Процессор по сути - мозг компьютера. Термин существует в компютерной индустрии как минимум с начала 60-х годов. Хотя форма, схема и реализация ЦПУ значительно изменились по сравнению с первыми образцами, его основные предназанчение остается таким-же. На больших машинах процессоры занимают одну или несколько печатных плат. |
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
volatile, спасибо за дословный перевод. Не стоило, серьезно
![]() rodnover, спасибо за ответ. fish9370, м-м, не знал этой информации о Linux-e. Спасибо. Пост благодарностей ![]() Это сообщение отредактировал(а) Hagrael - 19.8.2011, 15:24 |
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
Я приостанавливаю эту тему... снова. Вначале изучу микроконтроллеры, а потом буду читать про архитектуру компьютера. Всем спасибо!
|
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
для экзешника скорее всего именно енго и даст, потому что на момент его загрузки виртуальная память процесса практически пуста (экзешник загружается туда почти первым). А вот с длл да, тут как повезет
-------------------- Обижено школьников: 8 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |