In this video, we're going to learn about a few C# and JIT decompilation tips using WinDBG.
Sztuka programowania 1501 dni, 2 godziny, 24 minuty temu 20 źrodło rozwiń
Nie wiem czy macie prawo jazdy, ale nawet jeśli nie, to pewnie zrozumiecie wysublimowaną analogię, którą zaraz przeczytacie. Otóż jeżdżąc samochodem i mniej więcej kojarząc przepis drogowe, możemy jeździć z powodzeniem całe życie. (...)
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...
Na dobrą sprawę notka powinna kończyć się na krótkim stwierdzeniu: do zrzutów procesów należy używać tylko aplikacji o tej samej 'bitowości', co zrzucana aplikacja. Nie byłbym jednak sobą, gdybym nie postanowił przyjrzeć się nieco bliżej problemowi. W systemie 64-bitowym wszystkie procesy są 64-bitowe. Kropka. Aplikacje 32-bitowe uruchomione są w trybie emulacji w ramach WOW64, jednak dla systemu dalej są to procesy 64-bitowe, choć z pewnymi rozszerzeniami związanymi z architekturą - a więc dodatkowymi ...
Dziś dość nietypowy wpis, ponieważ zamiast rozwiązywać kolejne problemy ludzkości, przedstawię listę moich programów codziennego użytku, bez których moja praca byłaby mniej efektywna oraz mniej zajmująca oraz codzienne czynności bardziej uciążliwe i niezadowalające. Wpis może być o tyle ciekawy, że lubię korzystać z rzeczy nowych, w pewien sposób innowacyjnych oraz ogólnie mało znanych...
W poprzedniej notce opisałem technikę pozwalającą na debuggowanie dynamic assemblies przy wykorzystaniu najnowszej wersji biblioteki sosex w ramach WinDbg. Tym razem sprawdzimy skuteczność tej metody w odniesieniu do SQL-CLR. Nieco przydługawy, ale konieczny wstęp CLR pojawił się w SQL Serverze w wersji 2005 i pozostał w nim na dobre. Dzięki jego obecności można pisać triggery, procedury składowane, funkcje, agregaty oraz własne typy danych definiowane przez użytkownika i korzystać z nich w podobny sposó...
Biblioteka SOS, która dostarczana jest wraz z .NET Framework to nie jedyne źródło informacji o aplikacjach .NET analizowanych w WinDbg. Poza nią jest jeszcze Psscor4 (oraz wcześniejsza wersja - Psscor2, obie do ściągnięcia z Microsoft), która jest rozbudowaną wersją sos i jest najczęśniej zamiast niej używana. Kolejna to sosex, autorstwa Steve’a Johnsona, o której tu i ówdzie już wspominałem i właśnie o niej powiemy dziś parę słów. Miesiąc temu pojawiła się najnowsza wersja tej biblioteki, w której pojaw...
Dziś powiemy sobie na temat (chyba) najbardziej zaawansowanego narzędzia służącego do debuggowania naszego kodu na produkcji. WinDbg, bo o nim będzie mowa, to część pakietu Debugging Tools for Windows. Do celów przykładowych posłużymy się aplikacją z poprzedniego wpisu o mDbg. WinDbg Tak jak już było wspomniane wyżej WinDbg to część większego pakietu Debugging Tools for Windows i jest dostępny w dwóch wersjach 32- i 64-bitowej. Obowiązkowe narzędzie dla kogoś kto chce na poważnie zajmować się debuggowani...
Jednym z wyzwań przed jakimi stoją programiści w trakcie pracy nad aplikacją jest sposób przechowywania w pamięci ‘wrażliwych danych’, czyli wszelkiego rodzaju haseł, connection stringów, etc., a zatem informacji, którymi ludzie niechętnie dzielą się ze wszystkimi wokół. Generalnie chodzi bowiem o to, żeby jakiś dobry człowiek podczas przeglądania pamięci procesu nie miał na widelcu wszystkich tych danych, a jedynie sieczkę z której wyciągnięcie czegokolwiek sensownego graniczy z cudem. I właśnie specjal...
W komentarzach do poprzedniego wpisu Sławek dopominał się o 'ciąg dalszy', więc może jako uzupełnienie dodam garść informacji odnośnie dostępności modułów w zrzutach pamięci analizowanego procesu. Weźmy zatem aplikację testową z poprzedniego tekstu i przygotujmy zrzuty pamięci dla działającego procesu, a potem sprawdźmy co też możemy z nich wyłuskać odnośnie załadowanych modułów. 1. WinDbg W WinDbg mamy polecenie .dump z wieloma parametrami określającymi zestaw informacji do zapisania w pliku zrzutu. Dla...
Poprzedni tekst zakończyłem zagadką: czy wykonując !SaveModule będziemy mieli kod dynamicznej metody DynamicClass.SecureGetKey(Test.Program, Int32) w pliku na dysku? Nikt nie odpowiedział, więc ja to zrobię: Nie, kod generowany w ramach DynamicMethod nie znajdzie się w zrzucie modułu na dysku. Zdziwieni? Ja trochę, a to jeszcze nie jest ostatnia niespodzianka, jaką serwuje nam SaveModule.Dziś zapoznamy się z następną, ale po kolei. Uwaga! Wszystkie dalsze rozważania dotyczą aplikacji x86, więc wszystki...
Zacznę kontrowersyjnie. Lubię jak aplikacja nie działa, tak jak powinna. To znaczy - niekoniecznie lubię sam fakt niepoprawnego działania, ale dzięki temu mam możliwość odpalenia debugger’a (lub innego użytecznego narzędzia – głównie SysInternals), aby dowiedzieć się dlaczego i spróbować to naprawić. Ostatniego czasu ciekawych wrażeń dostarcza(ło) mi IE8. Pewnego dnia, bez powodu, IE na moim laptopie zaczął raczyć mnie niniejszym błędem jeszcze nawet przed tym jak się dobrze uruchomił: