![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Gazon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 9.1.2005 Репутация: 3 Всего: 8 |
В поисках утилиты, которая шифровала бы IL код(обфускатор) я набрел на такую утилиту(protector):
http://www.remotesoft.com/salamander/protector.html Она заменяет в сборках IL код на native не трогая метаданные. Соответственно у меня сразу возникли такие вопросы: как такое приложение может выполняться? Ведь сборки с native кодом не могут быть работоспособными в силу следующих причин: Когда приложение запускается, то и CLR и JIT компилятор подразумевают, что в сборке IL код. И JIT сканирует сборку и начинает компилировать необходимый код в native, предполагая, что он компилирует IL код, а так мы ему подсуним native код. Как тогда будут происходить дела с межплатформенностью??? Ведь благодаря JIT компилятору и IL коду, нам не надо задумываться об архитектуре платформы, и платформенно зависимый native код генерируется с учетом архитектуры данного компьютера, на котором запустили приложение. А тут в сборке не будет IL кода, JIT не будет компилировать native код с учетом под конкретную платформу(потому что ему нечего будет компилировать), и native код, который создаст эта утилита в сборке не будет межплатформенным. Ну и межъязыкового взаимодействия между сборками тоже не будет. может кто прояснить ситуацию? --------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться. |
|||
|
||||
| stron |
|
|||
![]() Консультант ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1654 Регистрация: 17.7.2003 Где: Питер Репутация: 4 Всего: 36 |
IMHO, всё предельно просто:
1. Метаданные остаются для описания сборки, хотя, возможно, они слегка изменяются 2. Можно даже предположить, что утилита просто берёт файл из ГАКа 3. IMHO, на межплатформенность можно вообще положить - я не видел ни одной .NET проги под юникс. А может кто-нибудь видел такие? 4. Различия в архитектуре компьютера - наверное идёт адаптация под PIII или PII Не знаю как сейчас, но раньше все эти адаптации были достаточно убогими.
А там и так его нет. Взаимодействие происходит в рамках одного языка - IL. -------------------- подписи нет |
|||
|
||||
| Gazon |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 9.1.2005 Репутация: 3 Всего: 8 |
Ну вот о том и речь, если бы взаимодействие происходило в пределах IL, то если в сборке native код, то взаимодействия бы не было. Но взаимодействие просиходит из-за метаданных. Поэтому межъязвковое взаимодействие остается.
Я видел. DotGNU project Mono project вполне рабочие проекты .Net под Linux, и это только те, о которых я слышал. ссылка на скриншоты DotGNU : http://www.gnu.org/projects/dotgnu/screenshots.html
Оказалось, что это не так. На самом деле JIT не сканирует код. В начале все (почти все) указатели в таблицах методов (или как они называются) указывают на точку входа в JIT, который компилирует код и изменяет указатель в таблице, чтобы он указывал на скомпилированный код. Т.е. в таблицах метаданных, в которых находится и сам IL код, указатель для каждой ячейки таблицы с IL кодом указывает на точку входа в JIT. И когда кусок кода IL среда хочет скомпилировать, она просто дергает за этот указатель, и для этого куска кода срабатывает JIT. Поэтому, если в сборках(точнее в ее таблицах)содержится не IL код, а native, то адрес указателя для определенного куска native кода уже указывает не на точку входа в JIT, а сразу на себя, потому что это уже готовый скомпилированный код, и тем самым мы не вызываем JIT для компиляции этого куска кода, а зразу исполняем его. Правильно? Везде пишут, что JIT сканирует код перед тем как его начать компилировать и определяет какие сборки необходимо еще загрузить. Но ведь такого быть не может. Ведь он компилирует только IL код, а IL код содержит только инструкции, поэтому даже просканировав IL код, нельзя определить какие типы нам понадобятся и какие сборки для этого надо загрузить. Это определяет CLR. --------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться. |
||||||
|
|||||||
| [Last]Wizard |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.7.2004 Где: Минск, Беларусь Репутация: 4 Всего: 10 |
Если я тебя правильно понял, то данная утилитка не только скрывает данные из сборок, она также позволяет повысить производительность .NET-приложения. Я имею в виду, что первый запуск приложения будет происходить не медленнее, чем последующие, так как код уже откомпилирован в native, следовательно компилировать его "на лету" нету смысла. И еще скомпилированый код будет храниться в самой сборке, а не в системном кэше, что убережет его от удаления. И еще такой вопрос. Эта утилита при компиляции IL в native использует системный JIT или собственные алгоритмы? |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Всегда полезно читать ФАК:
Не думаю чтобы это было эффективнее IL. -------------------- |
|||
|
||||
| Gazon |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 9.1.2005 Репутация: 3 Всего: 8 |
Еще у них одна хорошая утилита есть: вырезает только необходимое для твоей программы из .NET framework и линкует вместе с твоей программой. Таким образом твоя программа возрастает в объеме не очень сильно, но программа не требует установки .NET framework.
Во дают. А на главной странице утилиты вот как они объясняют про утилиту:
А из Faq'a выясняется, что это никакой не native код, а всего-лишь псевдо-native, который всего лишь скрывает IL и он во время исполнения программы также компилится JIT'ом в native. Ух как я зол. Это сообщение отредактировал(а) Gazon - 14.1.2005, 18:27 --------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться. |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |