Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа программы 
:(
    Опции темы
boostcoder
Дата 17.8.2011, 13:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата

Вектор состояния кота в момент открытия коробки переходит в состояние «ядро не распалось, кот жив». Таким образом, в лаборатории кот признан живым. За пределами лаборатории находится друг. Друг еще не знает, жив кот или мёртв. Друг признает кота живым только тогда, когда экспериментатор сообщит ему исход эксперимента. Но все остальные друзья еще не признали кота живым, и признают только тогда, когда им сообщат результат эксперимента. Таким образом, кота можно признать полностью живым только тогда, когда все люди во вселенной узнают результат эксперимента. До этого момента в масштабе Большой Вселенной кот остается полуживым и полумёртвым одновременно.

PM WWW   Вверх
Hagrael
Дата 17.8.2011, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Т. е. протектор загружается загрузчиком программ, проделывает нужные операции... А дальше что? Программа-то должна загрузиться загрузчиком программ, чтобы тот сделал все нужные выводы, сообщил о чем надо Windows etc.
PM MAIL   Вверх
rodnover
Дата 17.8.2011, 17:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 2
Всего: 10



типа такого:
оригинальная программа
Код

int main()
{
    return 0;
}


Загрузчик делает обертку над программой, пакует, кодирует и получается такой псевдокод:

Код

typedef int (*entry_point)(void);

entry_point DecryptDataProgram(void *From, void * To);

BYTE ProgramCrypt[]; // Зашифрованная программа
void *ProgramDecrypt; // Куда расщифровываем
int main()  // Это уже начальная функция протектора
{
    entry_point *old_main;
    old_main = DecryptDataProgramm(ProgramCrypt, ProgramDecrypt); // Выделяем память, расшифровываем данные, возвращаем точку входа
    old_main(); // Запускаем саму программу
}


Грубо, конечно, но примерно так.
PM MAIL   Вверх
maydjin
Дата 17.8.2011, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.1.2010

Репутация: нет
Всего: нет



Цитата

затем , что если загрузчик хочет загрузить по другому адресу, он должен подправить связи.. 

Цитата(rodnover @  17.8.2011,  09:13 )
Сколько раз я проверял под отладчиком винда всегда выдавала мне тот адрес который указан в PE-заголовке. А вообще это просто точка отсчёта, для ориентации по памяти программы все смещения в программе (jmp, jz, jnz, call) указаны относительные. Некоторые защиты строятся на изменении этого адреса.

Цитата(asmdzen @  17.8.2011,  09:15 )
вообще то дает )

Цитата(asmdzen @  17.8.2011,  09:15 )
писали уже что есть оптимизация для этого, т.е. если программа загрузится куда хотела то будет работать "быстрей" 

Не совсем верно, а про оптимизацию  совсем не верно.
Базовый адрес записываеться компоновщиком на этапе сборки программы, и может быть изменен соответсвующими опциями оного.
На самом деле это не совсем адрес - это смещение относительно начала виртуально адресного пространства, которое у каждого процесса своё.
Не знаю точно как всё дело происходит под linux и другие платформы (хотя думаю существенных отличий нет), а под win это выглядит примерно так:
1.  Загрузчик получает уведомление о запуске нового процесса
2. Загрузчик вызывает менеджер памяти, который выделяет под x32 2^32 под x64 2^64 байт виртуальной памяти процессу(за предоставление этой памяти отвечае страничный мененджер).
Процессу по умолчанию доступна только половина адресного пространства, доступ к второй половине вызовет ошибку, т.к она доступна только ядру.
3. Загрузчик считывает pe заголовок и размещает в виртуальном адресном пространстве код и статические данные.
4. Ядро создает основной поток процесса выделяя память под стек относительно адреса базы, при том на сколько я помню начало стека будет как раз этим самым базовым адресом.(Тут не совсем уверен - нет под рукой отладчика если базовый адресс не адрес начала стека, то это адрес первой инструкции кода основного потока) 
5. Управление передаеться программе

Подробней почитать/спросить можно на вышеупомянутом сайте wasm.ru.
Не совсем уверен за п4 но если посмотреть адреса локальных переменных в основном потоке то похоже на правду.
Главный мессадж моего топика :
Да программа всегда загружаеться по базовому адресу.
Но этот адрес расположенн в виртуальном адресном пространстве, т.е физический адрес на 99,9999......% будет каждый раз новый(ну по крайней мере примерно первые  <количество dword в вашей оперативной памяти> запуска под win32  smile)
Прошу прощения если есть какие нибудь неточности, но основную мысль надеюсь передал верно.

Это сообщение отредактировал(а) maydjin - 17.8.2011, 21:06
PM MAIL   Вверх
rodnover
Дата 18.8.2011, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 2
Всего: 10



по пункту 4му - точно не верхушку стека указывает. Адреса и размеры сегментов ниже прописываются.
PM MAIL   Вверх
Hagrael
Дата 19.8.2011, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Спасибо за ответы, но сейчас я пытаюсь разобраться со стеками. И, признаться, не могу перевести некоторые фрагменты:
Цитата(wiki)
The central processing unit (CPU) is the portion of a computer system that carries out the instructions of a computer program, to perform the basic arithmetical, logical, and input/output operations of the system. The CPU plays a role somewhat analogous to the brain in the computer. The term has been in use in the computer industry at least since the early 1960s.[1] The form, design and implementation of CPUs have changed dramatically since the earliest examples, but their fundamental operation remains much the same.
On large machines, CPUs require one or more printed circuit boards.

О каких распечатанных кружках-досках идет речь? о_О

Добавлено через 54 секунды
(да-да, это не информация о стеке, но изучая стеки, я вдруг обнаружил, что не понимаю термин ЦПУ).
PM MAIL   Вверх
rodnover
Дата 19.8.2011, 10:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 2
Всего: 10



Если я не ошибаюсь, то printed circuit boards переводится как печатная плата. 
PM MAIL   Вверх
fish9370
Дата 19.8.2011, 11:59 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Hagrael, позволь дать совет, во-первых тебе нужно изучать линукс.. вижу твою тягу к системному программированию (или по крайней мере к изучению работы ОС) - линукс для этого подходит как нельзя лучше.. он открыт, под него довольно просто писать свои драйверы, есть и документация, и куча примеров.. во-вторых начни с книги "Разработка ядра Linux" (Роберт Лав).. ее можно купить или скачать в сети.. - очень простым языком описанно как работает ОС из каких подсистем она состоит и т.д.. там есть и сравнение винды и линукса, так что это тебе будет в любом случае интересно..

целенаправленно сядь и прочитай книжку..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
volatile
Дата 19.8.2011, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Hagrael @  19.8.2011,  10:44 Найти цитируемый пост)
The central processing unit (CPU) is the portion of a computer system that carries out the instructions of a computer program, to perform the basic arithmetical, logical, and input/output operations of the system. The CPU plays a role somewhat analogous to the brain in the computer. The term has been in use in the computer industry at least since the early 1960s.[1] The form, design and implementation of CPUs have changed dramatically since the earliest examples, but their fundamental operation remains much the same.
On large machines, CPUs require one or more printed circuit boards.

Приблизительный перевод:

Центральный процессор (CPU), это часть компьютерной системы который обеспечивает выполнение инструкций компьютерной программы. Выполняет основные арифметические, логические операции и операции ввода/вывода. Процессор по сути - мозг компьютера. Термин существует в компютерной индустрии как минимум с начала 60-х годов. Хотя форма, схема и реализация ЦПУ значительно изменились по сравнению с первыми образцами, его основные предназанчение остается таким-же. 
На больших машинах процессоры занимают одну или несколько печатных плат.

PM MAIL   Вверх
Hagrael
Дата 19.8.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



volatile, спасибо за дословный перевод. Не стоило, серьезно smile
rodnover, спасибо за ответ.
fish9370, м-м, не знал этой информации о Linux-e. Спасибо.

Пост благодарностей smile

Это сообщение отредактировал(а) Hagrael - 19.8.2011, 15:24
PM MAIL   Вверх
Hagrael
Дата 20.8.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Я приостанавливаю эту тему... снова. Вначале изучу микроконтроллеры, а потом буду читать про архитектуру компьютера. Всем спасибо!
PM MAIL   Вверх
bems
Дата 20.8.2011, 18:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(Hagrael @  17.8.2011,  09:04 Найти цитируемый пост)
его очень навряд ли даст?
для экзешника скорее всего именно енго и даст, потому что на момент его загрузки виртуальная память процесса практически пуста (экзешник загружается туда почти первым). А вот с длл да, тут как повезет



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.