View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002245 | SAS.Планета | Хотелка / Feature request | public | 15-11-2013 14:51 | 30-10-2014 12:10 |
| Reporter | vdemidov | Assigned To | zed | ||
| Priority | low | Severity | trivial | Reproducibility | have not tried |
| Status | resolved | Resolution | fixed | ||
| Product Version | 131111 | ||||
| Target Version | 141111 | Fixed in Version | 141111 | ||
| Summary | 0002245: Исправить базовые адреса для dll входящих в дистрибутив | ||||
| Description | Очень полезно, что бы базовые адреса всех входящих в дистрибутив dll были уникальные и адресные пространства не пересекались. | ||||
| Additional Information | http://www.delphikingdom.com/asp/viewitem.asp?catalogid=774 | ||||
| Tags | No tags attached. | ||||
| Attached Files | |||||
| parent of | 0002246 | closed | zed | Исправить базовый адрес библиотеки TileStorage_GC.dll |
| parent of | 0002247 | closed | zed | Исправить базовый адрес библиотеки f1ct.dll |
| parent of | 0002248 | resolved | zed | Исправить базовый адрес библиотеки TimeZone.dll |
| parent of | 0002249 | resolved | zed | Исправить базовый адрес библиотеки libge.dll |
| parent of | 0002250 | resolved | zed | Исправить базовый адрес библиотеки zlib1.dll |
| parent of | 0002251 | resolved | zed | Исправить базовый адрес библиотеки FreeImage.dll |
|
|
Работает - не трогай. |
|
|
Всего-то надо поменять базовый адрес и перекомпилировать. Хуже не будет. |
|
|
Нужно же чтобы ещё и адресное пространство всех dll не пересекалось. Т.е. если просто задать адрес одной либе $20000000, а другой $20000004 толку всё равно не будет. |
|
|
Проще всего взять адреса на которые их сейчас преобразует система. |
|
|
Мне кажется, это будет зависеть от системы. Покажи скриншот со своими адресами? |
|
|
Будет, на других системах могут быть программы внедряем длл с совпадающими адресами и произойдет релокация, но сейчас то релокация точно происходит. |
|
|
Первый скриншот сделан на 64-битной винде, а второй на 32-битном нетбуке. |
|
|
Кстати, я не предлагаю менять сразу все dll, потому и разбил на кучу дочерних хотелок. Можно поштучно, постепенно подкладывая в ночнушки. |
|
|
Мне нужен список: dll - base adress, в котором будут перечислены все dll, которые может использовать SAS на текущий момент и базовые адреса, которые они должны использовать. Этот список (в виде текстового файла), я ожидаю в этом репозитории: https://bitbucket.org/sas_team/sas.lib.external Как только будет такой список, я пересоберу нужные dll и закрою все связанные тикеты. Сам я составлять этот список не возьмусь. |
|
|
Тебе именно файлик нужен? Если я в конкретные тикеты повписываю? А то создание временного файлика в репозитории смотрится странно. |
|
|
Почему же временного? При последующих обновлениях либ мне же нужно будет не забыть прописывать правильные адреса. Так что файлик будет более чем постоянный. И на него нужно будет ориентироваться при добавлении новых dll. |
|
|
Давай я все-таки где-то здесь выложу файлик, а в репу закинешь его сам. А то когда я это смогу сделать, я не знаю. |
|
|
Ок. |
|
|
Кстати, обрати внимание. На твоём же скриншоте у leveldb и libpng прописаны как бы правильные ImageBase. Но на самом деле у них всё те же 0x10000000h. И вообще этот адрес у всех сишных либ, что я собирал, но монитор почему-то его не показывает и всё выглядит как-будто бы ОК. |
|
|
Ты меня озадачил. Единственная мысль которая приходит в голову, что дело в использовании ASLR в Windows 7, а оба скриншота делались на Windows 7 хоть и с разной битностью. Для leveldb и libpng включена поддержка ASLR. При этом система выполняет реаллокацию, вроде как, один раз для всех процессов. Так что учитывая, что XP уже пропадает, можно попробовать ограничиться включением ASLR для собранных нами библиотек. |
|
|
Похоже на правду. И насколько я вижу, в MSVC эта поддержка включена по-умолчанию, а в delphi нам нужно использовать специальную директиву, причём как в dll, так и в exe: > The easiest way of enabling both ASLR and NX is to do this: > Add '{$SETPEOPTFLAGS $140}' to the project source file (.dpr or .dpk) ну и приглядывать за этим моментом, при добавлении новых либ. |
|
|
Точно. Дело именно в ASLR, если я запускаю вторую копию Планеты до закрытия первой то адреса leveldb и libpng в ней будут точно такие же как и в первой, а если после закрытия, то у leveldb и libpng уже получаются новые адреса. |
|
|
> ну и приглядывать за этим моментом, при добавлении новых либ. А какие из проблемных либ у нас студией собираются? FreeImage.dll и все? |
|
|
Да. Там почему-то оказалось, что этот флаг снят. Надо будет посмотреть в настройки проекта. |
|
|
ASLR решает проблему двойной загрузки dll в память, но при первой загрузке либы, у нас таки будет происходить реалокация адресов, о чём говорилось в статье, по мотивам которой и открыт тикет: > Процесс загрузки по другому адресу долгий. Система пробегает по всему коду, и исправляет адреса на правильные, а таких адресов может быть десятки и сотни тысяч(!!!). И возникает дилемма: с одной стороны современные технологии и ASLR, а с другой - быстродействие. Так что может имеет смысл наоборот, отключить эту фишку, если ты отдаёшь приоритет именно быстродействию? Тот же zlib, который я сегодня обновил, не использует ASLR и у него уникальный image adress. Т.е. их выбор налицо. |
|
|
http://blogs.msdn.com/b/mattev/archive/2007/08/21/enabling-aslr-for-memory-savings.aspx Судя по этой заметке я таки правильно понял работу ASLR и она таки решение проблемы с минимумом работы. |
|
|
Почитай статейку, при использовании ASLR реаллокация происходит в ядре, а не в процессе и она общая для всех экземпляров использующих dll. Так что никакой диллемы. |
|
|
http://stackoverflow.com/questions/3617600/does-aslr-cause-a-slow-loading-of-dlls |
|
|
Ок, stackoverflow меня убедил. Значит переходим на ASLR где это возможно? |
|
|
Ну как по мне это логичный шаг. И вроде как проблем принести не должен. Кстати, а какие вообще могут быть проблемы? А то моя банальная эрудиция теряется и отказывается отвечать на этот вопрос. :) |
|
|
64-Bit EurekaLog compiler crashes when enabling ASLR and NX |
|
|
Речь про 64-битную компиляцию, у нас она пока даже не планируется. Плюс как я понимаю сами эти библиотеки компилируются без подключения Эврики, а для самой САС.Планеты мы ASLR включать тоже не планировали. |
|
|
> Плюс как я понимаю сами эти библиотеки компилируются без подключения Эврики Некоторые (libge) с эврикой. Я согласен, что для нас это пока не актуально, однако ж, могут быть и грабли. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 15-11-2013 14:51 | vdemidov | New Issue | |
| 15-11-2013 14:51 | vdemidov | Status | new => confirmed |
| 15-11-2013 14:55 | vdemidov | Relationship added | parent of 0002246 |
| 15-11-2013 14:56 | vdemidov | Relationship added | parent of 0002247 |
| 15-11-2013 14:58 | vdemidov | Relationship added | parent of 0002248 |
| 15-11-2013 15:00 | vdemidov | Relationship added | parent of 0002249 |
| 15-11-2013 15:02 | vdemidov | Relationship added | parent of 0002250 |
| 15-11-2013 15:04 | vdemidov | Relationship added | parent of 0002251 |
| 15-11-2013 15:08 | vdemidov | Status | confirmed => assigned |
| 15-11-2013 15:08 | vdemidov | Assigned To | => zed |
| 15-11-2013 16:49 | zed | Note Added: 0013270 | |
| 15-11-2013 18:22 | vdemidov | Note Added: 0013272 | |
| 15-11-2013 18:22 | vdemidov | Note Edited: 0013272 | |
| 15-11-2013 18:28 | zed | Note Added: 0013273 | |
| 15-11-2013 18:44 | vdemidov | Note Added: 0013274 | |
| 15-11-2013 18:47 | zed | Note Added: 0013275 | |
| 15-11-2013 19:01 | vdemidov | Note Added: 0013276 | |
| 15-11-2013 19:26 | vdemidov | File Added: dll_base.png | |
| 15-11-2013 19:52 | vdemidov | File Added: dll_base32.png | |
| 15-11-2013 19:54 | vdemidov | Note Added: 0013277 | |
| 15-11-2013 20:08 | vdemidov | Note Added: 0013278 | |
| 13-02-2014 11:57 | zed | Note Added: 0013770 | |
| 13-02-2014 11:58 | zed | Status | assigned => feedback |
| 13-02-2014 12:31 | vdemidov | Note Added: 0013771 | |
| 13-02-2014 12:31 | vdemidov | Status | feedback => assigned |
| 13-02-2014 12:33 | zed | Note Added: 0013772 | |
| 13-02-2014 12:57 | vdemidov | Note Added: 0013775 | |
| 13-02-2014 12:58 | zed | Note Added: 0013776 | |
| 13-02-2014 13:52 | zed | Note Added: 0013778 | |
| 13-02-2014 14:44 | vdemidov | Note Added: 0013779 | |
| 13-02-2014 15:05 | zed | Note Added: 0013780 | |
| 13-02-2014 15:07 | vdemidov | Note Added: 0013781 | |
| 13-02-2014 15:10 | vdemidov | Note Added: 0013782 | |
| 13-02-2014 15:12 | zed | Note Added: 0013783 | |
| 13-02-2014 15:24 | zed | Note Added: 0013784 | |
| 13-02-2014 15:25 | vdemidov | Note Added: 0013785 | |
| 13-02-2014 15:25 | zed | Note Edited: 0013784 | |
| 13-02-2014 15:27 | vdemidov | Note Added: 0013786 | |
| 13-02-2014 15:28 | vdemidov | Note Added: 0013787 | |
| 13-02-2014 15:34 | zed | Note Added: 0013788 | |
| 13-02-2014 15:37 | vdemidov | Note Added: 0013789 | |
| 03-03-2014 08:47 | vdemidov | Target Version | 140303 => 140404 |
| 09-03-2014 11:53 | zed | Note Added: 0013935 | |
| 09-03-2014 12:12 | vdemidov | Note Added: 0013936 | |
| 09-03-2014 12:21 | zed | Note Added: 0013937 | |
| 24-10-2014 11:40 | vdemidov | Target Version | 140404 => 141111 |
| 30-10-2014 12:10 | zed | Status | assigned => resolved |
| 30-10-2014 12:10 | zed | Fixed in Version | => 141111 |
| 30-10-2014 12:10 | zed | Resolution | open => fixed |
| 08-08-2025 13:24 | zed | Category | Хотелка => Хотелка / Feature request |