2011-09-27 25 views
5

Tôi có một dll biên dịch đơn mà tôi cần thay đổi một chút. Nó được viết bởi tôi cách đây nửa năm, nhưng tôi đã mất mã nguồn. Có một chuỗi mã hóa cứng duy nhất trong nó (đó là một tên tập tin)Làm thế nào để chỉnh sửa một chuỗi hardcoded trong DLL biên dịch?

tôi cần phải thay đổi nó TestPage.html-TestPage1.html (nó không phải lâu hơn nữa)

Làm thế nào để làm điều đó? Chuỗi ẩn danh, đoạn mã tương ứng là:

... + folder + "TestPage.html" 

Không có biến nào được gán.

Xin cảm ơn trước.

EDIT: Tôi không muốn biên dịch lại mã C# sau khi giải nén bằng công cụ tương tự như Reflector!

+0

Nếu bạn không muốn biên dịch lại mã C# sau khi giải nén thì hãy dịch ngược sang IL - cách trả lời mà abatishchev đã đăng ** là ** cách đúng để thực hiện việc này – Justin

+0

Nếu bạn không muốn biên dịch lại , bạn đã hết các lựa chọn. – abatishchev

Trả lời

6

Bạn có thể sử dụng CFF Explorer, cung cấp chế độ xem rất thô trên các hội đồng .NET. Nó cũng cung cấp khả năng xem và thậm chí sửa đổi luồng UserString (tìm nó dưới .NET Directory > MetaData Streams > #US).

Dòng UserString lưu trữ các chuỗi ký tự dạng chuỗi như chữ bạn mô tả. Bạn sẽ có thể tìm thấy chuỗi cụ thể của bạn với chức năng tìm và sửa đổi nó. Tuy nhiên, có một giới hạn: Bạn không thể sử dụng một chuỗi có độ dài khác (ngắn hơn hoặc dài hơn). Điều này sẽ làm rối loạn các chỉ số của tất cả các chuỗi sẽ theo sau trong luồng UserString và tất cả các phần bù của các phần khác. Vì vậy, thật không may tôi nghĩ rằng việc thay đổi nó thành TestPage1.html sẽ không hoạt động, vì nó dài hơn một ký tự.

+0

Làm việc như một sự quyến rũ - Tôi vừa thêm một khoảng trống (mã 00) và nó cũng đã khắc phục được sự cố của tôi. –

+0

đã làm việc cho tôi .. lộng lẫy –

8

Sử dụng Reflector (hoặc công cụ tương tự khác) để dịch ngược IL thành C# (hoặc một ngôn ngữ CLR khác), sau đó - chỉnh sửa và biên dịch lại.

+0

Tôi không thể. Mã của nó khá dll phức tạp: với rất nhiều hàm ẩn danh, các tệp, các lớp một phần trong đó. –

+2

@IlyaSmagin Tại sao không? Thậm chí nếu bạn không thể dịch ngược thành C#, bạn có thể biên dịch ngược với IL mà xây dựng. – Justin

4

Bạn có thể sử dụng công cụ miễn phí ILSpy để dịch ngược mã và tài nguyên từ tệp .NET-dll.

+3

Và làm thế nào chính xác điều này sẽ giúp tôi với vấn đề của tôi? –

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