eXeL@B —› Вопросы новичков —› Как дизассемблировать приложение .NET Core? |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 16 мая 2019 09:42 · Личное сообщение · #1 Есть приложение, написанное с использованием .NET Core, можно ли его исследовать чем-то, как например, исследуются нет ассембли Reflectorом? | Сообщение посчитали полезным: Medsft |
|
Создано: 05 июня 2019 22:12 · Поправил: Adler · Личное сообщение · #2 |
|
Создано: 06 июня 2019 15:45 · Личное сообщение · #3 Medsft Да, это так. Тоест активность падает после инит, но при любом событие гуя всплеск активности. Смотри, выводится в лог два параметра - дельта времени(ms) и счётчик выборок за данное время. Могу снять любую статистику, какую только хочешь. Не работает это говно как в рекламе. e10a_06.06.2019_EXELAB.rU.tgz - guan.png ----- vx |
|
Создано: 06 июня 2019 16:58 · Поправил: cppasm · Личное сообщение · #4 difexacaw - открой для себя Ngen: Один раз MSIL компилируется в нативный образ и сохраняется в кэше сборок. После этого при запуске приложения всегда автоматически запускается нативный образ - MSIL не используется вообще. Насчёт JIT Medsft правильно написал. При первом вызове функции она компилируется в натив (насчёт всей цепочки вызовов не уверен) - после этого обращений к MSIL коду функции нет. Соответственно если речь не про хелло ворлд - чем сложнее приложение тем меньше разница с нативом (накладные расходы меньше, т.к. они есть только на первый вызов функции). | Сообщение посчитали полезным: difexacaw |
|
Создано: 06 июня 2019 20:20 · Личное сообщение · #5 cppasm Судя по тестам это так. Тоесть повторно событие не наступает, хотя я не уверен. Если повторно некоторые действия с гуем например выполнить, то всё равно какие то события происходят по выборке, хоть их и не много. Полную оценку дать сложно, так как в образе есть ресурсы, которые не зависят от транслятора и к ним выборка остаётся как и в обычном апп. ----- vx |
|
Создано: 07 июня 2019 00:02 · Личное сообщение · #6 |
|
Создано: 07 июня 2019 08:19 · Личное сообщение · #7 |
|
Создано: 07 июня 2019 11:25 · Личное сообщение · #8 difexacaw пишет: так как в образе есть ресурсы ты сам обо всем почти догадался(про ресурсы)). И если еще раз прочтешь то что я написал выше то сможешь там увидеть фразу что "компилятор не весь образ компилирует за раз а хер знает по какому алгоритму строит цепочки ввзаввисимости от графа выполнения " т.е. проведи экперимент: нажми на любую кнопочку в гуе, запротоколируй активность а потом нажми ее еще раз и уидишь падение активности. (При определенном шаманстве со сборкой(в студии так не сделать) можно заставить компилятор при инициализации откомпилировать всю сборку - это используется в системах защит NET приложений) Еще: в NET сборке (ресурсы это не совсем ресурсы как в нативе: -> к ресурсам относятся также : strings, methodname, обьявленные структуры).Будет время если тебе интересно я создам тестовое приложение чтобы было веселей)Да прям щас)) |
|
Создано: 07 июня 2019 11:35 · Поправил: difexacaw · Личное сообщение · #9 Вот полный лог по выборке из образа exe. Там все события выборки в образ из UM(исключая сервисные - ядерные). По идеи после динамик компиляции выборок быть не должно, за исключением ресурсов, но ресурсы обычно выбираются гуем из KM(битмапы всякие), это не видит визор. Можно исключить ресурсы, ограничив предел образа, тк они в отдельной секции. Счётчик не совсем линейный, тикает не по таймеру, а проверка на переполнение при выборке > 1s. Отсюда нелинейность - если небыло выборки за Ns, то дельта времени > N. Впрочем это не имеет значения. Ну и время конечно относительное, так как визор тормозит апп(оно слишком толстое) и консольный вывод, но это никак не влияет на измерения, те на число выборок. В конце лога запуск апп завершён - активность упала. Затем я растянул окно и резкий всплеск выборки. Этого не должно быть, если всё компилится на лету. 1a58_07.06.2019_EXELAB.rU.tgz - nf.png ----- vx |
|
Создано: 07 июня 2019 13:01 · Поправил: Medsft · Личное сообщение · #10 Я сделал Вам тест. Все откроется Вам с ним. Обратите внимание на тесты 3 и 4 в одном использованы структуры в другом нет. 1 тест простой бакграунд 2 тест разовые мат.вычисления 3 тест обращение к заранее обьявленному классу strings[] 4 тест обращение к динамически созданному (при запуске приложения) list<strings>. ed67_07.06.2019_EXELAB.rU.tgz - ForDifeacaw.exe Добавлено спустя 2 минуты Code:
Код приложения Добавлено спустя 10 минут difexacaw пишет: Затем я растянул окно и резкий всплеск выборки обращение к ресурсам maybe Добавлено спустя 11 минут В своем примере я ограничил Вам баловство с гуей Добавлено спустя 19 минут Самому интересно как поведет кривая активности при этих тестах (особенно при вызове их повторно!!!) |
|
Создано: 07 июня 2019 13:35 · Поправил: difexacaw · Личное сообщение · #11 |
|
Создано: 07 июня 2019 14:14 · Личное сообщение · #12 |
|
Создано: 07 июня 2019 21:38 · Личное сообщение · #13 Medsft Вот что получается. [0 -- 0x20] события это запуск апп, счётчик в окне тикает. 21, 22, 23 - нажал Т2.расчитать. 24 нажал повторно. 25, 26, 27 есчо три нажатия повторно. 28 нажал Т3.получить При повторных нажатиях Т3 выборок в образ из юм нет. 29 жму Т2.расчитать. 2A, 2B, 2C есчо три раза нажал. 2D, 2E жму Т3, Т4 далее выборки нет. 2F нажал Т2 30 снова нажал. 31 жму Т3 - Т4 несколько раз. 32, 33 опять Т2 34 остановить тест. 35 запустить тест. 36 остановить - запустить. 37 Т2 Т3 - Т4 выборки нет. 38 Т2 39 остановить - запустить. 2058_07.06.2019_EXELAB.rU.tgz - log.png Добавлено спустя 17 минут Когда выборка единичная, это копирование строки. Адрес реальной инструкции иной, это буфер визора. Этот блок в динамическом буфере. 43cb_07.06.2019_EXELAB.rU.tgz - log2.png Добавлено спустя 18 минут Вот. f4ca_07.06.2019_EXELAB.rU.tgz - m.png Добавлено спустя 24 минуты 0x662ADE mov esi,N Этот код видимо скомпилен, раз адрес фиксирован. ----- vx |
|
Создано: 08 июня 2019 23:48 · Личное сообщение · #14 SegFault пишет: если ты покуришь еще этой вкусной матчасти то внезапно охереешь ибо NET может работать быстрее нативного кода Работаю C# разработчиком с 2013 года, было много проектов. И никогда не видел, чтобы управляемый код был быстрее натива. Наоборот, каждый раз убеждался управляемый код проигрывает минимум 20-50% в производительности. И это еще в идеальной ситуации. Был даже провальный проект, когда серверное телефонное приложение на плюсах пытались переписать на шарпе. В итоге уперлись в то, что шарповый код не может в реалтайме распарсить 7000 пакетов в секунду. Это 60 аналоговых каналов в потоке E1. Хотя нативное приложение на C++ с этим справлялось на отлично. Проблема не только что JIT генерирует неэффективный код. Но еще и в GC. Который может тормознуть приложение в любой момент и заняться уборкой мусора. Что для "реалтаймового" приложения совершенно недопустимо. | Сообщение посчитали полезным: difexacaw |
|
Создано: 09 июня 2019 00:19 · Личное сообщение · #15 difexacaw пишет: Вот что получается сорри не могу посмотреть лог, нет компа поблизости, только в понедельник jangle пишет: Работаю C# разработчиком с не буду мерится с вами... jangle пишет: Был даже провальный проект их и у меня тоже было N - количество, сейчас веду всего один проект по защите NET кода в мега-обвязках корпоративных клиентов. jangle пишет: В итоге уперлись в то итог один : специализация языка (поймёте молодец, не поймёте... Ещё пару провальный проектов и поймёте))) jangle пишет: Но еще и в GC вот тут вы правы это большая замороченная жопа, НО спросите у нативщиков что для них означает, при написании кода, словосочетание "memory leaks" а Вы как NET разработчик об этом даже не заботитесь (только не надо понимать буквально) и все это благодаря GC. |
|
Создано: 09 июня 2019 00:28 · Личное сообщение · #16 |
|
Создано: 09 июня 2019 00:35 · Личное сообщение · #17 Medsft пишет: специализация языка У дотнета сейчас по-сути одна специализация - WEB разработка. Там не требуется ни высокая производительность, ни миллисекундная отзывчивость приложения. Отсюда бешеная популярность и желание менеджмента пропихнуть шарпы во все сферы разработки. Medsft пишет: сейчас веду всего один проект по защите NET кода Довольно странный проект. Учитывая что сейчас 99% дотнета это Web-сервисы ASP.NET и т.п. работающий на сервере разработчика. Добавлено спустя 12 минут SegFault пишет: разработчик 2013го года, гугли про джит хоть википедию почитай для начала и узри правду и истину jit компеляция бывает быстрее статической ну а какието свои индус проекты в пример приводить ну я х его з Вы русским языком нормально владеете? Что за сленг и ошибки малолетнего школотрона? Википедию это вам надо читать юноша, а не учить взрослых людей. |
|
Создано: 09 июня 2019 00:50 · Личное сообщение · #18 |
|
Создано: 09 июня 2019 19:02 · Поправил: Medsft · Личное сообщение · #19 difexacaw пишет: Там картинка и какой ваш вывод? jangle пишет: Довольно странный проект. какой есть уж . клиент северное приложение с толстым клиентом обслуживающее на сегодняшний день 15 тысяч рабочих мест (да я даже не знаю сколько на самом деле может больше в разы или 10 разов) Есть быстрые операции есть повседневка, пока вроде разрабам спасибо говорят. А моё дело маленькое закрыть код и не допустить тормозов А ещё проект есть)) ILSpector. |
|
Создано: 09 июня 2019 19:30 · Личное сообщение · #20 Medsft На простом апп после повторных действий выборка пропадает, но это в простейшем случае. Если посмотреть к примеру на выделение RWE блоков, то там куча идёт аллокаций, тоже при каждом действии и по таймеру. Если повторно клацать по кнопкам то со временем активность спадёт. Но фишка в том, что при каких то мелких событиях запускаются эти механизмы толстые. И таким образом апп становится дико тормозным. ----- vx |
|
Создано: 10 июня 2019 00:30 · Поправил: ajax · Личное сообщение · #21 Medsft пишет: спросите у нативщиков что для них означает, при написании кода, словосочетание "memory leaks" на днях встретился код на дотнете. heap alloc, выделенную вызовом функции внешней либы, не освобождает. это нормально? сам дотнет сие творит? в дебаг уже лень лезть, чтоб убедиться ----- От многой мудрости много скорби, и умножающий знание умножает печаль |
|
Создано: 10 июня 2019 13:07 · Личное сообщение · #22 |
<< . 1 . 2 . |
eXeL@B —› Вопросы новичков —› Как дизассемблировать приложение .NET Core? |