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

Поиск:

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



**


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

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



Цитата(mes @  17.8.2011,  09:11 Найти цитируемый пост)
для стековых переменных память не выделяется вообще

я имел ввиду смещается указатель на вершину стека, Вы меня поняли )

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

вообще то дает )

Цитата(Hagrael @  17.8.2011,  09:04 Найти цитируемый пост)
И чем этот базовый адрес будет лучше того, что даст Windows?" 

писали уже что есть оптимизация для этого, т.е. если программа загрузится куда хотела то будет работать "быстрей"
PM MAIL   Вверх
rodnover
Дата 17.8.2011, 09:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

+ еще протекторы - добавляют свой сегмент, кодируют (сжимают) программу и указывают свой адрес входа. А при запуске распаковывают программу "где она и была" и передают управление ей.
PM MAIL   Вверх
mes
Дата 17.8.2011, 09:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(rodnover @  17.8.2011,  08:13 Найти цитируемый пост)
Если компилятор определяет, что переменная больше не используется, то он может начать в этой ячейке хранить другую переменную.

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




--------------------
PM MAIL WWW   Вверх
rodnover
Дата 17.8.2011, 09:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



union никто не отменял. smile
PM MAIL   Вверх
mes
Дата 17.8.2011, 09:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(rodnover @  17.8.2011,  08:31 Найти цитируемый пост)
union никто не отменял.


Цитата(mes @  17.8.2011,  08:30 Найти цитируемый пост)
 для разных переменных одного блока

а не разных переменных одной специальной структуры.. 



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


Шустрый
*


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

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



Цитата(mes @  17.8.2011,  09:11 Найти цитируемый пост)
затем , что если загрузчик хочет загрузить по другому адресу, он должен подправить связи.. 

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

Цитата(asmdzen @  17.8.2011,  09:15 Найти цитируемый пост)
вообще то дает )

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

Вопрос почти решен. Только вот этого я не понял:
Цитата(rodnover @  17.8.2011,  09:18 Найти цитируемый пост)
+ еще протекторы - добавляют свой сегмент, кодируют (сжимают) программу и указывают свой адрес входа. А при запуске распаковывают программу "где она и была" и передают управление ей. 

Буду признателен, если объясните.

Цитата(rodnover @  17.8.2011,  09:13 Найти цитируемый пост)
12. В принципе да, если у него будет одинаковый формат и одинаковые соглашения.

Ответ получен smile 

Цитата(rodnover @  17.8.2011,  09:13 Найти цитируемый пост)
Windows, Linux, MacOS, тип процессора (16, 32, 64 битный) и так далее.

И для каждой из ОС свой метод компиляции, так?
PM MAIL   Вверх
rodnover
Дата 17.8.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот на вскидку вспомнил
http://www.aspack.com/asprotect.html

В целом, это инструментарий, который сжимает, шифрует код программы (типа sfx архива) и при каждом запуске воссоздает оригинал программы, который и работает. Вот еще: http://ru.wikipedia.org/wiki/ASProtect

Цитата

И для каждой из ОС свой метод компиляции, так?


Метод то один, только условности разные. Например, в 32битных системах размер указателя 4 байта, в 64 битных - 8 байт, вызов внешних процедур, использование стека, регистров при вызове внешних процедур. Это тоже всё ассемблером успешно познается.


Цитата

а не разных переменных одной специальной структуры.. 

Потому я смайл и поставил. Хотя, структура то для экономии памяти и была придумана. Вообще, не вижу причин, чтобы преднамеренно указывать 2м переменным один адрес.

Это сообщение отредактировал(а) rodnover - 17.8.2011, 09:49
PM MAIL   Вверх
Hagrael
Дата 17.8.2011, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(rodnover @  17.8.2011,  09:48 Найти цитируемый пост)
Вообще, не вижу причин, чтобы преднамеренно указывать 2м переменным один адрес.

Фрагментация памяти?

Насчет протектора: он извлекает программу из архива и кладет в какую-то директорию как .tmp-файл, после чего запускает?

Цитата(rodnover @  17.8.2011,  09:48 Найти цитируемый пост)
Метод то один, только условности разные. Например, в 32битных системах размер указателя 4 байта, в 64 битных - 8 байт, вызов внешних процедур, использование стека, регистров при вызове внешних процедур. Это тоже всё ассемблером успешно познается.

А размеры задаются при компиляции или же при запуске программы сообщаются ей с помощью ОС?
PM MAIL   Вверх
rodnover
Дата 17.8.2011, 10:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Фрагментация памяти?

Да не. Смысл экономить на том чего много?

Цитата

А размеры задаются при компиляции или же при запуске программы сообщаются ей с помощью ОС?

При компиляции задаются. В простом случае компилятор создается под конкретную платформу. Но, также есть кросскомпиляторы (которых всё больше), в параметрах которых можно указать платформу, формат выходного файла, на основании которого они будут компилировать. Пример

Код

gcc -mtune=cpu-type

cpu-type указывает под какой процессор компилировать.

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


любитель
****


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

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



Цитата(rodnover @  17.8.2011,  08:48 Найти цитируемый пост)
 Хотя, структура то для экономии памяти и была придумана. 

ну да именно для экономии памяти  smile  smile 




--------------------
PM MAIL WWW   Вверх
bsa
Дата 17.8.2011, 10:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Hagrael @  17.8.2011,  10:04 Найти цитируемый пост)
Насчет протектора: он извлекает программу из архива и кладет в какую-то директорию как .tmp-файл, после чего запускает?
Нет. Он выделяет память, распаковывает туда код программы и передает ему управление. Если интересно, можешь посмотреть исходники такого упаковщика - upx.
PM   Вверх
xvr
Дата 17.8.2011, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(mes @  17.8.2011,  09:30 Найти цитируемый пост)
но.. хотелось бы взглянуть на компилятор, на котором средставами языка, можно получить один и тот же адрес для разных переменных одного блока.. 

Компилятор может поместить 2 разные переменные из одного блока в одно и то же место в памяти, если у них не пересекаются времена жизни (live range analysis). Но как только вы возьмете у переменной адрес, ее область жизни немедленно расширится до области жизни переменной с этим самым адресом (как минимум), а после этого у оригинальных переменных их области жизни пересекуться, и компилятор разведет их по разным адресам в памяти.

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

PM MAIL   Вверх
mes
Дата 17.8.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(xvr @  17.8.2011,  10:16 Найти цитируемый пост)
Так что поместить 2 разных переменных по одному и тому же адресу компилятор теоритически может, а вот увидеть это средствами языка увы нельзя.

Цитата(mes @  17.8.2011,  08:30 Найти цитируемый пост)
ох как скользко.. с точки зрения асм кода, да, может,  также может и не занимать памяти вообще.. но это все оптимизация конечного кода..

и пока мы не взяли адрес (пусть косвено, посредством передачи объекта по ссылке) некорректно говорить о том, что объект располагается по какому либо определенному адресу... smile он может путешествовать как ему вздумается  smile 

хм .. что то мне это вдруг странным образом напомнило одного знаменитого кота.. раньше как то внимание не заострялось на этом smile


Это сообщение отредактировал(а) mes - 17.8.2011, 13:09


--------------------
PM MAIL WWW   Вверх
rodnover
Дата 17.8.2011, 13:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Оптимизация Кота?
PM MAIL   Вверх
mes
Дата 17.8.2011, 13:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Кот Шрёдингера


--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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