2016-09-09 16 views
6

Tôi muốn nhìn thấy như thế nào phương phápdịch ngược NET Thay thế phương pháp (v4.6.1)

public String Replace(String oldValue, String newValue); 

đó là bên mscorlib.dll (System.String) hoạt động.

Tôi phân tích với mscorlib.dll với dotPeek và bên trong phương pháp này có một cuộc gọi đến phương pháp ReplaceInternal mà tôi không thể tìm thấy nó

string s = ReplaceInternal(oldValue, newValue); 

Tôi có tìm kiếm phương pháp này ngay cả trên mã nguồn mở .NET Core từ GIT nhưng không may mắn.

View my Decompiled code

Xin giải thích đâu là phương pháp này và những gì bên trong?

+0

(http://referencesource.microsoft.com/#mscorlib/system/string.cs,35ab9efe11757286) ist [ReplaceInternal' '] 'extern', do đó, rất có thể nó được triển khai dưới dạng" không được quản lý ", mã C++ gốc. Xem [P/Invoke] (https://en.wikipedia.org/wiki/Platform_Invocation_Services) để biết chi tiết. –

+2

btw bạn không cần phải dịch ngược, bạn có thể thấy nguồn @ http://referencesource.microsoft.com/#mscorlib/system/string.cs,69fc1d0aa6df8a90 – Bob

Trả lời

4

Có một cái nhìn here, bạn sẽ nhận thấy điều này:

// 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); 

Các extern từ khóa means rằng phương pháp này được thực hiện bên ngoài, trong dll khác.

Điều đó đang được nói, nó thậm chí có thể được viết trong một dll không được quản lý (trong C++ khá có thể), được sử dụng bởi mô-đun này. Vì vậy, bạn không thể dịch ngược mã này hoặc xem nó, như bạn thường làm với mã được quản lý.

Cập nhật

Sau một ít tìm kiếm tôi tìm thấy mã tương ứng trong dự án coreclr:

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

+0

Cảm ơn bạn rất nhiều, nhưng đâu là "another.dll"? Tôi muốn nhìn thấy bên trong .. hoặc tên của anh ta là gì? –

Các vấn đề liên quan