Pull to refresh
153
0
Stanislav Sidristij @sidristij

Семинары по платформе .NET CLRium

Send message

Снимаем дамп объектов с памяти .Net приложения

Reading time11 min
Views23K
Продолжаем тему интересного на .Net, от чего мир Java будет посмеиваться (хотя у них это также возможно сделать), а приверженцы С++ говорить: «чего они только не сделают чтобы не учить C++».

В данной заметке мы напишем по сути – простенькое ядрышко профилировщика памяти для платформы .Net, который будет снимать дамп с SOH кучи (а в перспективе и с LOH).

Для написания статьи нам понадобится код из статьи Получение указателя на объект .Net и Ручное клонирование потока (измерение размера объектов).

Наши цели на сегодня:
  • Научиться итерировать кучу .Net
  • Научиться находить начало кучи .Net
  • Попробовать сытерировать все объекты чужого домена.


Ссылка на проект в GitHub: DotNetEx

Читать дальше →
Total votes 31: ↑27 and ↓4+23
Comments6

Roslyn: встреча .Net сообщества на CLRium #2

Reading time2 min
Views7.9K
Довольно долгое время я пытался изучить Roslyn, но как и все мы, столкнулся с единой проблемой: времени на это абсолютно не было. Как обычно решается этот вопрос? Мы идем на множество ресурсов и ищем доклады и статьи на интересующую нас тему и как по шаблону повторяем движения автора, который показывает как этим пользоваться. С чем мы сталкиваемся, когда ищем описания тем, предложенных на CLRium? Мы не находим ничего. Т.е., конечно, Google выдает что-то по запросам “Roslyn”, “Roslyn samples”, но все-таки это тысячу раз разжеванные примеры, и притом древние как мамонты по меркам выхода новых версий CTP. Это важно, т.к. наличие информации предполагает развитость той или иной инфраструктуры. А самая крутая но не единственная статья по Roslyn на данный момент — это эта: Roslyn для автоматического перевода кода C# в 1С-код
Отсюда и возникли идеи рассказать на CLRium про Roslyn, RyuJIT, CoreFx, шаринг объектов между процессами и прочие вопросы, на которые сложно найти ответы в сети Интернет.
Список тем, которые будут раскрыты Кодом
Total votes 20: ↑17 and ↓3+14
Comments10

Продолжаем кромсать CLR: пул объектов .Net вне куч SOH/LOH

Reading time6 min
Views18K
Добрый день, уважаемые разработчики (просто не знал, с чего начать пост). Предлагаю перед тем как начнется трудовая неделя немного подразмять мозги (совсем немного) и построить свой Small Objects Heap для .Net. Вернее даже не Small Objects Heap, а Custom Objects Heap.

Как все мы знаем, в .Net существует две группы куч: для больших и малых объектов. Как выяснить, во сколько нам обойдется объект можно при помощи кода из этой статьи (он нам пригодится): Ручное клонирование потока, а получить указатель на объект и по указателю получить сам объект можно научиться, прочтя эту статью: Получение указателя на объект .Net. Также нам понадобится статья корейского (южно-) программиста по перенаправлению указателя на скомпилированную часть метода на другой метод: 실행 시에 메서드 가로채기 — CLR Injection: Runtime Method Replacer 개선

Так что давайте поэкспериментируем и напишем библиотеку, которая позволит:
  • Аллоцировать участок памяти
  • Разметить его как набор объектов определенного .Net типа
  • Выделять объекты с этой памяти
  • Возвращать их обратно


Ссылка на проект на GitHub: DotNetEx

Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments15

Интересное по хабу .Net за 2014 год

Reading time2 min
Views26K
Мы с вами люди рабочие и зачастую не замечаем ничего что происходит за пределами нашей работы. Так и я, работая изо дня в день, знаю только про свой SpecFlow и смежные вопросы. Но ничего – по сторонам. Этим постом я хочу восполнить пробелы новостей в области .Net

Новости хаба .Net на Хабре занимают 33 страницы или 328 постов. Что говорит о том что новости появляются почти каждый день =) Посмотрим на самое интересное из них (на мой скромный взгляд). Ну и загляните под кат: до ката, конечно же, не все.

Доступен новый JIT: теперь с поддержкой SIMD
Как работает декомпиляция в .Net или Java на примере .Net
Microsoft раскрыла исходный код компилятора С#
Consulo: ~1000 коммитов, или как прошла осень
Под капотом у Stopwatch
Как тестировать код финализатора (c#). Послесловие: тест все-таки упал
Посмотреть на прочие статьи
Total votes 33: ↑27 and ↓6+21
Comments0

Встреча .Net сообщества на CLRium #2. Как устроен и работает CLR, Roslyn, RyuJIT, CoreFx

Reading time4 min
Views8.5K
Я не люблю заезженное слово «конференция». Это — встреча разработчиков с общими интересами, которые хотят послушать о трюках, которые позволяют обходить правила, установленные в.Net Framework, которым интересна тема использования меняющих и создающих языки, тулов. А также, что можно получить если знаешь как компилировать и декомпилировать приложение. Об этом не говорят. Потому что разговор на эту тему слишком долгий чтобы уместить в формат одного часа стандартного выступления на конференциях. Я пробовал выступать на .NEXT, и помимо положительных отзывов были «галопом по Европам». Согласен, за час не уложиться. Добро пожаловать в полный формат!

Я надеюсь, в вашей памяти теплится еще прошлый CLRium и сейчас никто не отчаивается и яро смотрит на технологии и все с удовольствием готовы их поглощать. Я помню и время от времени поглядываю на ваши многочисленные отзывы, которые греют мое желание провести все еще раз. Причем на этот раз — с хорошей и полезной практикой.

Теперь у нас целых два дня. Причем вы можете купить билет как на один, так и на оба дня. Первый день — как в прошлый раз: много хардкора, не практичного, но очень интересного… Позволяющего еще лучше понять как все работает и как этим можно воспользоваться… Тем со временем еще немного накидаю. Много мяса на любителя. И второй — практика. Второй длиннее первого. На час =). Во второй день будет очень много Roslyn, JetBrains Nitra (он же N2, он же Nemerle2)? RyuJIT, .Net Framework open sourced. Вот честно, я бы сам сходил

Почитать и зарегистрироваться



cool Примеры статей и полный список тем выступлений — под катом
Читать дальше →
Total votes 28: ↑24 and ↓4+20
Comments0

Как работает декомпиляция в .Net или Java на примере .Net

Reading time6 min
Views37K

Сегодня хотелось бы поговорить про декомпиляцию приложений (все применительно к той же Java, да и любому языку с некоторыми допущениями и ограничениями, но поскольку сам я — .Net разработчик, примеры будут совсем немного MSIL'овизированы :) ).

Для вводной, перечислю текущие средства декомпиляции в мире .Net:
  • JetBrains dotPeek (поддержка R# хоткеев, сервер символов)
  • Telerik JustDecompile (также не плохой, множество хоткеев)
  • RedGate Reflector (аналог dotPeek, но платный. Изначально был основным в мире .Net, но пока был бесплатным)
  • icsharpcode ILSpy (хороший, opensource. Полезен, когда вы сами пишете код, использующий Mono.Cecil, т.к. Это даст лучшее понимание его работы)
  • 9rays Spices .Net Decompiler
  • Dis# с функцией inplace editor

Для программной декомпиляции:
  • Mono.Cecil (основной, самый крутой декомпилятор в мире .Net. На выходе получаете объектное «зеркало» содержимого сборки. Т.е. Максимально-упрощенно, без наворотов типа конвертации массива IL в DOM).
  • ICSharpCode.Decompiler (надстройка над mono.cecil, переводящая array[MSIL] в DOM, где есть циклы, switches и if'ы. Является частью SharpDevelop/ILSpy)
  • Harmony Core (аналогичное от меня, но сохраняющее информацию о символах. В среднем состоянии, не готова для прода, помощь приветствуется).


А теперь, хотелось бы описать как они работают (вам же интересно, как работает машинка от JetBrains?). Чтобы как минимум понять, насколько это сложно: написать свой декомпилятор .Net сборки обратно в код на C#.



Читать дальше →
Total votes 45: ↑41 and ↓4+37
Comments28

Механика неформального общения разработчиков C# на конференции

Reading time6 min
Views11K
Добрый день, читатели Хабра!

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

В Москве в C# есть сложившийся рынок труда с уровнем сопротивления в 120-130.000 и условным потолком в 180.000 рублей. На этих уровнях достаточное предложение качественной рабочей силы при ограниченном количестве позиций. Скоро этот рынок будет перекроен из-за изменения курса доллара. Как быстро дойти до этих уровней и даже преодолеть их?

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


Читать дальше →
Total votes 30: ↑25 and ↓5+20
Comments13

Изменение кода системных сборок или «утечка» .Net Framework 5.0

Reading time17 min
Views36K
Здесь я продемонстрирую возможность, которая по своей сути — самый настоящий хак. Вопрос, зачем это может понадобиться? На самом деле целей для этого может быть огромное множество. Итак наша задача — изменить код библиотеки mscorlib таким образом, чтобы все программы, которые ей пользуются, получили эти изменения. Не рантайм, конечно, а во время старта (для runtime необходимо проделать другие вещи, и тут надо оговориться что изменения эти не должны поломать текущие состояния библиотеки). Mscorlib я взял как пример, потому что она есть у всех на компьютере. Но можно хакать любую другую.

Все мы знаем, что для того, чтобы не было «ада dll», Microsoft помимо обычных версий и названия библиотек, дали возможность подписывать сборки ключом, public key которой гарантирует что конкретная сборка «пришла» от конкретного разработчика, а не от какого-то другого. Поэтому, если мы хотим по какой-то вполне добросовестной причине изменить код существующей библиотеки т.о., чтобы она загрузилась в чужой процесс и при этом ключик public key остался тем же, у нас этого не получится. Потому что мы не сможем ее подписать, у нас нет закрытого ключа.

Наша мини цель, чтобы программа вывела на консоль текст:



Читать дальше →
Total votes 67: ↑65 and ↓2+63
Comments15

Ручное клонирование потока. Когда Assembler + C# = Love

Reading time3 min
Views20K
Перейду сразу к делу. Задача: в любой точке кода путем вызова спец. метода создать второй поток, который начнет выполнение с точки вызова этого метода в родительском потоке, сохранив возможность отладки и значения всех локальных переменных на всех уровнях вызовов методов.

Реализация не зависит от конечной платформы (.Net/Java), т.к. написана на C++/Asm, однако пользовательский код сделан на C#, т.к. на нем пишу я.

image

Теперь, когда я наконец стабилизировал пример для 32-разрядных систем, набравшись храбрости, готов показать его общественности как полностью готовый. И, да, повторюсь: при адаптации будет работать на любой платформе



Читать дальше →
Total votes 47: ↑38 and ↓9+29
Comments32

CLRium: 10 дней до мини-конференции по нутрям .Net

Reading time2 min
Views5.5K
Что такое .Net? Java? Автомагическая система управления вашим кодом. Это целые заповедники со своими правилами, законами, которые нельзя нарушить и которые призваны сделать ваш труд проще, добавляя автоматизм в рутинные задачи. Задачи управления памятью, ресурсами, безопасностью, потоками. В те задачи, на которые вы отвлекаетесь, создавая свой код. Мне нравится сравнивать платформы типа .Net и Java c Матрицей. Вам дают идиллию, в которой вы живете не зная ничего про реальный мир. Программист, получив новые знания, уходит от реальности и начинает терять знания о потоках, процессорных регистрах и вообще, целиком уходит в терминологию фреймворков. Но, хоть реальный мир и менее практичен, знания о реальности вносят коррективы в понимание правил Матрицы и добавляют те возможности, о которых ранее не могло быть и речи.

Сетка докладов




Подробности — за катом
Читать дальше →
Total votes 19: ↑15 and ↓4+11
Comments6

CLRium. Как создать любую конференцию + плюшки для предстоящей Питерской встречи

Reading time7 min
Views4.7K
Сегодня на улицах Питера славная солнечная погода сменилась хмурым небом. Чем не повод посидеть в Интернете? В этой статье я хотел бы напомнить дорогим читателям что во-первых 19-го июня пройдет встреча .Net разработчиков Питера, на которую мы приглашаем как начинающих, так и профессионалов своего дела. В отличии от других мероприятий по .Net здесь не будет разговоров в стиле Капитана Очевидность, что вышла новая версия фреймворка такого-то. Большинство тем конференций, если постараться, можно найти в Интернете. Не платя много денег за прослушивание уже выложенных тех же самых докладов с прошлых конференций. Эта встреча раскроет исключительно свежие и общие для всех разработчиков знания: как все работает. Что такое поток и как им манипулировать. Что такое домен и как сделать IoC с динамически отгружаемыми типами. Как сделать ветвление потока на два? Причем чтобы второй поток начинал работу с точки ветвления первого? Что нам дает декомпиляция и какими средствами можно заменить PostSharp? Даже если нет особого интереса, просто советую прочитать список тем семинара

И, перед тем как рассказать, как же все-таки организовывалась Московская встреча, объявляю акцию для Санкт-Петербурга, которая действует с сегодняшнего дня:
  • Первые два человека, оплатившие участие, получат по кружке в форме объектива фотоаппарата
  • Не зависимо от даты оплаты каждый десятый, оплативший участие, получает возврат средств. Т.е. идет на мероприятие совершенно бесплатно!
  • Каждый оплативший из диапазона (5, 25, 45,… по счету) в период до 18-го числа включительно имеют право заказать у меня любые книги стоимостью до 1500 рублей (что в полтора раза дороже билета) и они будут торжественно вручены на семинаре (мне необходимо будет скинуть ссылку на интернет-магазин ozon.ru).

А проходить все будет тут ( страница с подробностями, страница с регистрацией, +7 (921) 948-16-08):


Итак, как же организовывалась Московская встреча? Об этом под катом
Читать дальше →
Total votes 23: ↑18 and ↓5+13
Comments7

CLRium: мини-конференция по нутрям .Net в Санкт-Петербурге

Reading time2 min
Views6.5K
Буквально на прошлой неделе была проведена мини-конференция по внутренностям CLR и как ими можно манипулировать. Сам тренинг очень сильно ждали и хотели увидеть не только в Москве, но и в остальных городах (ссылка на статью на Хабре с опросом). И исходя из того что сам я живу в Санкт-Петербурге, анонсирую его грядущее проведение именно в этом городе. Прошу заметить, что время проведения этой мини-конференции — вечернее. Это сделано для того чтобы Вы смогли сходить на него не отпрашиваясь с работы и не беря отгул. На этот раз день проведения — четверг. А это значит что у вас будет свободен вечер пятницы. А это, согласитесь, прекрасно -)

На текущей мини-конференции появилась новая тема — декомпиляция и обратная компиляция. Разбор библиотеки Mono.Cecil и личного опыта замены ей продукта PostSharp.

На этой мини-конференции будут освещены следующие темы:
  • Управление памятью .Net/Windows/процессора
  • Строение объектов .Net в памяти
  • Передаем объекты между AppDomains без сериализации: без накладных расходов.
  • Как работают исключения? Вклиниваемся в процессы обслуживания исключений.
  • Пишем пул объектов вне .Net памяти
  • Пишем ядро Memory Profiler’а — делаем дамп виртуальной памяти с распознанием .Net объектов в ней.
  • Пишем метод fork(): метод, создающий поток, который стартует с того же места, на котором был вызван fork (ветвление потоков) — C++/CLI/asm
  • Декомпиляция, редактирование и обратная компиляция. Что такое MSIL и так или он прост?


Картинка для затравки (после вызова CloneThread, текущий поток ветвится на два, каждый из которых идет в свою часть условия if):

Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments9

CLRium: до конца регистрации — 4 дня

Reading time3 min
Views4.7K
Впереди череда выходных, на которых можно отлично и полезно провести время. И на мой скромный взгляд, когда современный человек имеет тысячи дел, отвлекающих его от возможности расширить свои знания, наличие мастер-класса будет очень полезным. Ведь это как минимум возможность прийти и не отвлекаясь на домашние хлопоты сделать что-то интересное, полезное, а главное – новое для себя.
Несколько дней назад (а кажется, еще вчера) я опубликовал анонс мастер-класса по .Net Framework Internals, который сегодня был назван CLRium. На этой мини-конференции будет показано, как работает любое .Net приложение, и как внести в .Net приложение возможности, которые не закладывались при проектировании платформы. Зачем? Каждый из вас может преследовать свои интересы. Однако, на мой взгляд, можно вывести несколько групп интересов:

  • Вам очень интересно, как .Net Framework работает. Ведь если узнать как оно работает, можно понять ее сущность и начать как-то по-другому относиться в самой платформе. Без единорогов, розовых очков и фей в виде Garbage Collector’а;
  • Вы хотите подтянуть знания чтобы с легкостью отвечать на собеседованиях глубже чем требовалось, тем самым забирая более оплачиваемые вакансии
  • Вам интересно понять как можно легко и непринужденно взламывать .Net приложения в режиме реального времени (в, конечно же, академических целях, не нарушая законодательства и без злого умысла. Ну вы поняли)


Однако чем бы вы ни руководствовались, вы начнете понимать, почему в .Net Framework что-то сделано так или иначе. Откуда растут ноги не правильного подсчета count++ в разных потоках, почему сделали ThreadPool, почему есть потоки, а есть процессы… И на множество других вопросов, корни которых уходят за пределы платформы.
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments4

Мастер-класс по нутрям .Net Framework

Reading time3 min
Views20K
< Прежде всего хочу отметить что я имею ввиду под internals. В данном случае я имею ввиду именно внутренние структуры данных .Net Framework. Ведь, находясь под его опекой, что мы видим? Стройную архитектуру классов, строгую типизацию, настройки безопасности. И все вроде как автомагически работает и не надо ни о чем задумываться. И вроде как даже прекрасно. Но вы по сути, находитесь в Матрице. В Матрице, о законах которой вы знаете только понаслышке. Что GC работает именно так, вам сказали. Но Вы ведь не уверенны что это именно так?

Так вот если продолжать метафору, курс направлен на программный выход из границ CLR. Прослушав курс, проделав прямо на месте практические задания, вы научитесь выходить из .Net средствами .Net. Менять структуру типов .Net не прибегая к рефлексии. Вмешиваться в процесс многопоточности, и проделывать по-настоящему шаманские вещи.

Я очень надеюсь, что программа Вам очень понравится, т.к. по сути — это результат собственных исследований, и все что тут есть, нагуглить не получится.
Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments42

Получение указателя на объект .Net

Reading time5 min
Views27K

Сразу отвечу на вопрос «а зачем?». Просто интересно получить указатель на объект и потом подумать, что с ним особенного можно сделать :) Ведь если получить указатель, то дальше можно сделать все что угодно. Например, становится возможным изучить поведение SyncBlockIndex, или взять MethodTable и изучив, где что находится, изменить его содержимое. Можно мастерить собственные типы данных, не прибегая к Reflection. В общем можно делать много странных вещей, которые относятся больше к спортивному программированию и к саморазвитию. Однако, приступим.


Читать дальше →
Total votes 33: ↑29 and ↓4+25
Comments6

Кросс-платформенная разработка на Xamarin

Reading time12 min
Views20K
Добрый вечер, хабравчане! Сегодня хотелось бы написать о кросс-платформенной разработке в целом. Ведь по сути люди сейчас делят десктоп, сервер и мобильных клиентов и стараются искать кросс-платформенные тулы внутри каждого сектора, не заглядывая за рамки каждого из секторов. Это бывает по различным причинам. Одна из причин — Вася знает как делать десктоп на Java, а Петя — как делать приложеньки под iPhone на Objective-C. И никто даже догадаться не может что есть технологии, объединяющие все платформы воедино.

За катом много текста и статистики.


Мое выступление на Apps4All Forum. Выступление первое, все ошибки подачи материала уже намотал на ус.

Читать дальше →
Total votes 23: ↑15 and ↓8+7
Comments19

Ультиматум

Reading time1 min
Views74K
Что если вот прямо сейчас жизнь поставит перед Вами ультиматум: надо менять профессию. Не так, чтобы у вас при этом будет выбор, нет. Не интересно. А вот именно в этом будет жизненная необходимость. Я недавно посетил врача и у меня в глазах нашли какую-то фигню. Сейчас идут разборки, что именно нашли, но есть вероятность что я покину разработку в связи с напряжением зрения, которое в связи с новыми факторами, может быть утеряно. Хотя, скоре всего все нормально и это просто вытягивание бабла. Тем не менее, я предлагаю всем собравшимся порассуждать в комментариях, как бы вы провели остаток жизни, вдруг получив информацию, что по какой-то причине вам нельзя заниматься IT?

От себя напишу: лично я бы занялся пиаром. У меня всегда это отлично получалось :) После того как новой профессией я бы заработал достаточное количество денег, продал бы квартиру, сняв однушку и построил бы таунхаус. Распродал его бы по квартирам и отстроил бы на получившуюся прибыль два, потом 4. и так далее.

Читать дальше →
Total votes 144: ↑101 and ↓43+58
Comments209

Художественный календарь: введение

Reading time5 min
Views12K


Интро


Нам сегодня хотелось бы рассказать вам об одном амбициозном проекте. А именно, о календаре для ИТшников и всех кому он просто понравится. Почему возникла именно такая идея, что нами двигало и что в итоге получается, пойдет речь в этой статье.

Читать дальше →
Total votes 85: ↑58 and ↓27+31
Comments29

Календарь для ИТшников: введение

Reading time5 min
Views3.1K


Интро


Нам сегодня хотелось бы рассказать вам об одном амбициозном проекте. А именно, о календаре для ИТшников и всех кому он просто понравится. Почему возникла именно такая идея, что нами двигало и что в итоге получается, пойдет речь в этой статье.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments7

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity