2009-03-15 44 views
15

Tôi cần chuyển đổi mã IL thành C#. Tôi có một hội đồng và tôi đang đọc hội đồng này. Tôi lấy MethodBody từ MethodInfo và methodbody có phương thức GetILAsByteArraY() trả về một mảng byte bây giờ tôi muốn chuyển đổi mã IL thành C# này. Hãy giúp tôi giải quyết vấn đề này.Chuyển đổi IL thành mã C#

+0

Quyết định nhất trí! –

+1

Bạn cần điều này để làm gì? Nếu bạn mô tả tình huống của mình một cách chi tiết hơn, có lẽ chúng tôi có thể đề xuất nhiều hơn .NET Reflector. –

+1

@Anton Có lẽ chúng ta sẽ không thể hiểu được tin tặc này. –

Trả lời

20

Không phát minh lại bánh xe; sử dụng Lutz Roeder's .NET Reflector.

+3

Nó không phải là Lutz 'nữa. – Will

+21

Tôi nghĩ rõ ràng là anh ấy đang cố gắng tạo ra một bánh xe khác giống như của .NET Reflector và anh ấy muốn biết nó được tạo ra như thế nào. Lutz không nhất thiết phải là người duy nhất trên thế giới biết cách làm. –

+0

@HasanKhan đưa ra lựa chọn câu trả lời của OP, anh rất hài lòng với Lutz là người đàn ông duy nhất :) – nawfal

1

Hãy xem nếu tôi quản lý để có được nó trong đầu tiên: .NET Reflector! Điều này thực sự phải là Câu hỏi thường gặp ...

1

Bạn không thể làm điều này với Reflector?

Bạn có thể nạp một assembly và xem nó như là VB.net/C#/IL ...

0

Không có công cụ nào trong BCL sẽ thực hiện việc này; tuy nhiên, có một công cụ tuyệt vời được gọi là Reflector, mà bạn có thể viết các trình bổ sung của riêng mình. Vì vậy, bạn có thể sử dụng bằng cách này để lấy dữ liệu bạn muốn.

0

Reflector thực hiện việc này. Có lẽ bạn có thể sử dụng Reflector đối với Reflector và tìm hiểu cách nó xử lý vấn đề.

Bạn cũng có thể nói lý do bạn muốn thực hiện việc này - có thể có giải pháp tốt hơn cho vấn đề tổng thể của bạn.

+3

Phản xạ nội bộ bị làm mờ bằng cách sử dụng không in được (ít nhất là lutz đã làm điều đó). Trong khi có bạn có thể phản ánh về chính nó một câu hỏi tốt hơn sẽ là nó thực sự có giá trị mà ... – JoshBerke

+0

Vâng, đó là những gì tôi nghi ngờ. Đó là lý do tại sao tôi hỏi anh ấy tại sao anh ấy muốn làm điều đó. –

0

Hãy để tôi là người đầu tiên đề nghị bạn lấy một bản sao của Reflector Red Gate.

+0

Điều này giống như la hét * FIRST! * Và nhận sai .... – cjk

+1

@ck Vâng, bạn trả lời một câu hỏi và sau khi nhấn Gửi 50 người khác đã trả lời. O well ... – Will

0

Có lẽ bạn nên thử Dis # nếu bạn không muốn phát minh lại ... Nó gần như là công cụ tốt nhất để chuyển đổi mã NetDASM có công cụ cho phép bạn chuyển đổi C# thành IL. có lẽ bạn nên xem xét điều đó.

9

Tái phát minh ra bánh xe chắc chắn là một cách tốt hơn để tìm hiểu! bạn sẽ phải tạo lớp của riêng mình để chuyển đổi iL thành C#. Điều này đòi hỏi kiến ​​thức về ngôn ngữ trung gian.

Tôi giả sử bạn đã chuyển đổi các mảng byte để hướng dẫn IL giống như chúng ta thấy trong Ildasm.exe, Sử dụng Reflection.Emit.OpCodes, OpCode.OperandType, BitConvertor.ReadByte(), BitConvertor.ReadInt32, vv

3

Nếu bạn muốn tự mình làm, bạn có thể bắt đầu từ Cecil.Decompiler cũ và tăng cường nó, xem the source codean old post of Jb. Evain announcing the project (Liên kết xuống).

+0

Cả hai liên kết đều bị hỏng. –

+0

Cố định cái đầu tiên, không thể làm bất cứ điều gì về cái thứ hai vì tôi không biết tại sao anh ta đặt blog của anh ấy lên mạng ngay cả khi anh ta vẫn tham khảo nó trên twitter. –

1

Đối với những người có công cụ tìm kiếm, Reflector không còn miễn phí nữa. Nhưng công cụ MIỄN PHÍ mới hơn và tốt hơn đang được cung cấp từ telerik có tên là JustDecompile. Tôi chỉ cần tải về điều này và nó rất tuyệt vời và chỉ là bản beta của nó. Rõ ràng telerik hứa hẹn miễn phí mãi mãi.

15

Phản xạ Lutz Roeder đã được mua và không còn có sẵn để tải xuống miễn phí.

Hiện tại, công cụ miễn phí (một lần nữa) được gọi là ILSpy. Tôi đã tìm thấy nó là rất tốt, và nó sẽ không chỉ tạo ra mã C# từ IL, nhưng cũng sẽ tạo ra một dự án .csproj nếu biên dịch toàn bộ một hội đồng DLL.

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