2016-09-09 31 views
6

Chcę zobaczyć jak metodadekompilować .NET Wymień metody (v4.6.1)

public String Replace(String oldValue, String newValue); 

że jest wewnątrz pliku mscorlib.dll (System.String) działa.

I dekompilowana do pliku Mscorlib.dll z dotPeek i wewnątrz metody jest wywołanie metody ReplaceInternal które nie mogę znaleźć to

string s = ReplaceInternal(oldValue, newValue); 

mam szukać tej metody nawet na otwartym źródle .NET podstawowych z GIT ale bez powodzenia.

View my Decompiled code

Proszę wyjaśnić, gdzie jest ta metoda, a co jest w środku?

+0

[ 'ReplaceInternal'] (http://referencesource.microsoft.com/#mscorlib/system/string.cs,35ab9efe11757286) ist 'extern', więc najprawdopodobniej jest implementowany jako" niezarządzany ", natywny kod C++. Zobacz [P/Invoke] (https://en.wikipedia.org/wiki/Platform_Invocation_Services), aby uzyskać szczegółowe informacje. –

+2

btw nie musisz dekompilować, możesz zobaczyć źródło @ http://referencesource.microsoft.com/#mscorlib/system/string.cs,69fc1d0aa6df8a90 – Bob

Odpowiedz

4

zaglądając here, można zauważyć, to:

// This method contains the same functionality as StringBuilder Replace. 
// The only difference is that 
// a new String has to be allocated since Strings are immutable 
[System.Security.SecuritySafeCritical] // auto-generated 
[ResourceExposure(ResourceScope.None)] 
[MethodImplAttribute(MethodImplOptions.InternalCall)] 
private extern String ReplaceInternal(String oldValue, String newValue); 

extern słowa kluczowego means, że ta metoda jest realizowany na zewnątrz, w innym dll.

Mimo to może być nawet napisane w niezarejestrowanej bibliotece DLL (w C++ całkiem możliwe), która jest używana przez ten moduł. Nie można więc dekompilować tego kodu ani go zobaczyć, jak to zwykle bywa z kodem zarządzanym.

Aktualizacja

Po trochę poszukiwań znalazłem odpowiedniego kodu w projekcie coreclr:

https://github.com/dotnet/coreclr/blob/master/src/classlibnative/bcltype/stringnative.cpp

+0

Dziękuję bardzo, ale gdzie jest "another.dll"? Chcę zobaczyć w środku ... lub jak się nazywa? –