Is catch the same as catch(Exception)? Not exactly. There is a small subtle nuance that causes catch(Exception) to be not hit. Chances that it happen are, however, close to zero very close to zero. According to the CLR via C# book (Richter, 2012): All programming languages for the CLR must support the throwing of Exception-derived objects because the Common Language Specification (CLS) mandates thi...
Rozmawiając z paroma kolegami po fachu zapytałem ich o czym chcieliby poczytać na blogach programistycznych. Jednym z tematów, który się przewinął, był Common Language Runtime, w skrócie CRL. Wychodząc na przeciw oczekiwaniom chciałbym przedstawić wam trochę wiedzy z samym bebechów .NET-a.Platforma .NET Zacznijmy, jak zawsze, od podstaw. Na początku była pustka, potem wielki wybuch… dobra, przyśpieszmy. Czym w ogóle są CLR, IL, JIT? Jeżeli wpadła ci w ręce książka dotycząca .NET (lub inne profesjonalne ...
Co oznaczają pojęcia boxing i unboxing? Jeśli ktoś kiedyś przygotowywał się do rozmowy kwalifikacyjnej czy do zaliczenia z podstaw języka C# na studiach, na pewno słyszał/czytał, że powyższe pytanie to pewniak na 100% o to spytają. Może i tak było, ale czy oprócz wykutych regułek orientujecie się, kiedy boxing występuję w praktyce na placu boju. W artykule omówię znane mi przykłady boxingu.
Sztuka programowania 2262 dni, 4 godziny, 39 minut temu 201 źrodło rozwiń
I really enjoy learning new architectures, design patterns, frameworks, libraries or in general – everything related to web development. I really do. But honestly, after quite long time all these stuff became a little bit… boring. To avoid possible burnout I decided to play with something completely different. My thoughts circled around functional programming (F#, Heskel), IoT, quantum programming in Q# and much more, but none of them felt right. Enlightenment ...
Sztuka programowania 2513 dni, 5 godzin, 59 minut temu 233 źrodło rozwiń
A few days ago I watch a very interesting talk from NDC given by Jon Skeet, Kathleen Dollard and Rob Conery. Around 41:15 minute Kathleen said something very interesting about protected internal...
Sztuka programowania 2604 dni, 6 godzin, 4 minuty temu 233 źrodło rozwiń
Nowadays, asynchronous programming isn’t something unusual. We all know that when it comes to do some I/O operations or HTTP request, we should do it async. Why? There’re several reasons but two most important are:Efficiency. In many cases, the code might work faster. That’s because it’s not forced to wait for the result. Instead, it can work on some other stuff and then come back for the response when it’s ready. Simple is that.Comfort. Async improves the comfort of using our applications. We don’t blo...
Sztuka programowania 2892 dni, 20 godzin, 13 minut temu 334 źrodło rozwiń
In one of the lasts post, I’ve showed you what tools to use to play with IL. I’ve also showed how to change the entrypoint of the application. Now lets learn some basic structure of IL code. Let’s dive in. Actually it’s not that different from C# code. We do have assemblies, classes and of course code. So it’s the same concepts as we know them from .NET – but it’s a bit different. Let’s see.View the code on Gist. Above we can see some Hello World program decompiled to IL. As you can see there’s a lot o...
When you are learning IL you might wonder why some directives even exists. They can do a lot of harm when used incorrectly. I’ll shed some light about one of them. Let’s check .emitbyte
Sztuka programowania 2972 dni, 18 godzin, 2 minuty temu 469 źrodło rozwiń
Architektura 2974 dni, 21 godzin, 57 minut temu 277 źrodło rozwiń
Did you ever wondered what it would be like if you are not limited to static Main(string[] args) as your entrypoint? Did you ever wanted more freedom over where your app starts? Actually you can have that.But in order to do it – you need to go one level lower. Into an IL level.
Dzień dobry bardzo! Trochę czasu minęło od publikacji ostatniego odcinka podcastu, ale mam nadzieję, że dzisiejsza rozmowa odkupi me grzechy 😉 Moim gościem był Paweł Łukasik – programista, blogger, lider Wrocławskiej grupy .NET oraz założyciel znanego i lubianego agreagtu treści – dotnetomaniak.pl. Dzisiejszy odcinek jest dość szczególny, ponieważ w końcu tematyka jest ściśle powiązana z .NET-tem. Paweł opowiedział o Intermediate Language. Czym jest IL? Co możemy dzięki niemu osiągnąć? Jakie narzędzia...
Sztuka programowania 3034 dni, 18 godzin, 3 minuty temu 152 źrodło rozwiń
Przemysław Walkowski.Ostatnio chciałem serializować i deserializować liste gdzie typem listy był interfejs. Chciałem do tego wykorzystać XmlSerializer-a. Okazało się, że przy użyciu tej klasy nie można serializować listy interfesjów do XML-a. Już chciałem szukać dlaczego nie można ale miałem trochę czasu i stwierdziłem, że tym razem zrobimy to w trudny sposób. Poniżej prezentuje jak można serializować i deserializować listę interfejsów.
Sztuka programowania 3578 dni, 2 godziny, 5 minut temu 447 źrodło rozwiń
Tak naprawdę, moje posty powinienem rozpocząć od wyjaśnienia czym jest JIT. To jedno z podstawowych pojęć, które pojawia się w przypadku omawiania .NET. Wolałem jednak najpierw pokazać kilka programów napisanych w IL Assembly. Kilka postów powinno dać już jakiś obraz czym jest IL. Oczywiście kod piszemy w C# lub w innym języku wysokiego poziomu, więc wystarczy abyśmy ogólnie mieli pojęcie o IL. Co to jest więc kompilacja JIT? Czym różni się od klasycznej? W językach niezarządzanych takich jak CPP...
Pętle i warunki, naturalnie są z jednym z podstawowych elementów każdego programu. Języki wysokiego poziomu umożliwiają realizację tego za pomocą słów If, for, foreach,while. W językach niskiego poziomu, takich jak IL Assembly, wszystkie powyższe czynności wykonuje się za pomocą skoków warunkowych i bezwarunkowych. Działają one analogicznie do słowa kluczowego GOTO. W IL, najprostsza instrukcja skoku to BR:br jump1 // jakas logika tutajjump1: //... br nie zawiera żadnego warunku. Można ją porównać do...
W poprzednim poście opisałem jak działa stos w IL. Wiemy, że jest on kluczowy dla wszelkich operacji. Jedną z ważniejszych instrukcji, wprowadzonych w tamtym poście jest ldc.i4. Służy ona do załadowania liczby 4 bajtowej na stos. Oprócz niej, istnieje wiele innych instrukcji, które pełnią analogiczną rolę. Rozważmy następujący kod c#: float floatNumber =533.3f; double doubleNumber =5454.14; string text ="text"; int[] array =newint[] {21, 3}; Console.WriteLine(floatNumber); Console.WriteLine(doubl...
O projekcie Fody po raz pierwszy, usłyszałem dość dawno temu, ale dopiero ostatnia prezentacja Tomka na Wroc.NET uświadomiła mi jak fajny jest to projekt. Ja sam będę miał przyjemność prezentować Fody’ego w nadchodzącym tygodniu (na spotkaniu KGD.NET) a dzisiaj wstęp na blogu. Czym jest fody? Krótko mówiąc to framework, który umożliwia odpalanie własnych tkaczy modyfikujących kod już po kompilacji. Dzięki temu cały tzw. pluming code, możemy wyciągnąć z naszego kodu źródłowego do osobnych modułów.
Analiza aplikacji .NET Zestaw narzędzi do analizy .NET-owych aplikacji znacznie różni się od klasycznych narzędzi dla zwykłych aplikacji x86 / x64, odmienna architektura kodu wymusiła utworzenie całej gamy dedykowanych narzędzi dla plików wykonywalnych .NET, spróbuję przedstawić kilka z nich, które mogą się przydać w reversingu.Dekompilacja kodu Pierwszym i podstawowym narzędziem, które chyba zna większość osób zajmujących się analizą oprogramowania i nie tylko jest dekompilator .NET Reflector..NET Refle...
W poprzednim poście wspomniałem o mojej walce w Mono Cecil, dzisiaj chciałbym się podzielić moimi wrażeniami i doświadczeniem. Dodam tylko, że o Mono usłyszałem na spotkaniach wrocławskiej grupy .net, wykład prowadził Paweł Łukasik, slajdy z wykładu dostępne są na jego blogu: http://pawlos.blogspot.com. Jak zwykle zapraszam na spotkania i wykłady. Źródła które pokaże, są tylko prostym przykładem, zamysłem tego co chciałem zrobić w docelowym rozwiązaniu. Powinny jednak wystarczyć by ukazać jak działa Mon...