Вопрос

Сделать класс, метод и переменную имена включаются в MSIL после компиляции проекта приложения Windows в EXE?

  • Для запутывание - меньше имен, сложнее перепроектировать.
  • И для Производительность - более короткие имена, более быстрый доступ.

например , Итак, если методы вызываются через name:

  • Сохраняйте имена короткий, улучшенная производительность для поиска по имени.
  • Сохраняйте имена загадочный, сложнее декомпилировать.
Это было полезно?

Решение

Да, они в IL - fire up Отражатель и ты их увидишь.Если бы они не попали в IL, вы не смогли бы использовать их в качестве библиотек.(И да, вы можете ссылаться на exe-файлы, как если бы они были библиотеками классов.)

Однако все это решается один раз в JIT.

Сохраняйте имена читаемый чтобы вы могли поддерживать код в будущем.Проблема с производительностью вряд ли приведет к Любой измеримая разница, и если вы хотите запутать свой код, не делайте этого на уровне исходного кода (где ты тот, кто читает код) - сделайте это с помощью специально созданного обфускатора.

Редактировать:Что касается того, что включено - почему бы просто не запустить Reflector или ildasm и не выяснить?Из памяти вы теряете имена локальных переменных (которые есть в файле pdb, если вы его создаете), но не более того.Имена закрытых методов и имена закрытых переменных все еще существуют.

Другие советы

Да, это так.Я не думаю, что при использовании более коротких имен будет достигнут заметный прирост производительности.Не существует способа, которым выигрыш компенсировал бы потерю удобочитаемости.

Локальные переменные не включены в MSIL.Поля, методы, классы и т.д. являются.Переменные основаны на индексе.

Имена участников действительно включаются в IL, независимо от того, являются ли они частными или общедоступными.Фактически, весь ваш код тоже будет включен, и если вы будете использовать Reflector, вы сможете практически прочитать весь исходный код приложения.Осталось только отладить приложение, и я думаю, что для этого могут найтись инструменты.

Вы должны АБСОЛЮТНО (и я не могу подчеркнуть это больше) запутать свой код, если вы создаете упакованные приложения, у которых много клиентов и конкурентов.К счастью, существует несколько доступных обфускаторов.

Это серьезная проблема, которая у меня есть с .Net.Поскольку MS проделывает такую большую кропотливую работу над этим, почему бы не разработать (или приобрести) профессиональный обфускатор и не сделать его частью VS.Dotfuscator просто не сокращает это, не ту версию, которая у них есть для сообщества.

  • Сокращайте имена, улучшайте производительность при поиске по имени.

Как это может иметь какое-то значение?Я не уверен, как виртуальная машина ищет идентификаторы, но я почти уверен, что она не выполняет прямой поиск по сравнению строк.Это был бы наихудший из возможных способов сделать это.

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

Честно говоря, я не думаю, что запутывание кода так уж сильно помогает.Большинство компетентных разработчиков уже развили в себе "шестое чувство", позволяющее быстро во всем разбираться, даже если идентификаторы, такие как имена методов, совершенно бесполезны, поскольку очень часто исходный код, который им нужно поддерживать или улучшать, уже имеет эти проблемы (я говорю об именах методов, таких как "DoAllStuff()").

В любом случае, безопасность через неизвестность обычно является плохой идеей.

Если вас беспокоит запутывание, ознакомьтесь .СЕТЕВОЙ реактор.Я протестировал 8 различных обфускаторов, и Reactor оказался не только самым дешевым коммерческим, но и вторым лучшим из них (лучшим был самый дорогой Dotfuscator Gold).

[ПРАВИТЬ]

На самом деле, теперь, когда я думаю об этом, если все, что вас волнует, это запутывание имен методов, то тот, который поставляется с VS.NET, Dotfuscator Community Edition, должен работать нормально.

Я думаю, что они добавлены, но длина имени ни на что не повлияет из-за способа поиска имен функций.Что касается запутывания, я думаю, что есть инструменты (Dotfuscator или что-то в этом роде), которые в основном делают именно то, что вы говорите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top