2011-09-27 15 views
5

Ho una singola DLL compilata che ho bisogno di cambiare un po '. È stato scritto da me mezzo anno fa, ma ho perso il codice sorgente. C'è una singola stringa hardcoded in esso (è un nome di file)Come modificare una stringa codificata in una DLL compilata?

ho bisogno di cambiare TestPage.html-TestPage1.html (non è molto più lungo)

Come farlo? La stringa è anonimo, corrispondente pezzo di codice è:

... + folder + "TestPage.html" 

Non c'è nessuna variabile è assegnato.

Grazie in anticipo.

MODIFICA: non desidero ricompilare il codice C# dopo averlo estratto con gli strumenti simili a Reflector!

+0

Se non si desidera ricompilare il codice C# dopo averlo estratto, quindi decompilare in IL - in ogni caso la risposta che abatishchev ha pubblicato ** è ** il modo corretto di farlo – Justin

+0

Se non si desidera ricompilare , hai esaurito le opzioni. – abatishchev

risposta

6

È possibile utilizzare CFF Explorer, che fornisce una vista molto grezza su assiemi .NET. Fornisce inoltre la possibilità di visualizzare e persino modificare lo stream UserString (trovarlo sotto .NET Directory > MetaData Streams > #US).

Il flusso UserString memorizza i valori letterali stringa come quello che hai descritto. Dovresti essere in grado di trovare la tua stringa particolare con la funzione di ricerca e modificarla. Tuttavia, vi è una limitazione: non è possibile utilizzare una stringa con una lunghezza diversa (più corta o più lunga). Ciò significherebbe rovinare gli indici di tutte le stringhe che seguiranno in seguito nello stream UserString e in tutti gli offset delle altre sezioni. Quindi, sfortunatamente, penso che cambiarlo in non funzionerà, poiché è un carattere più lungo.

+0

Funziona come un incantesimo - Ho appena aggiunto uno spazio vuoto (codice 00) e ha risolto comunque il mio problema. –

+0

ha funzionato per me .. splendido –

8

Utilizzare Reflector (o un altro strumento simile) per decompilare IL in C# (o un'altra lingua CLR), quindi - modificarlo e ricompilarlo nuovamente.

+0

Non posso. Il suo codice è una dll piuttosto complicata: con un sacco di funzioni anonime, file, classi parziali in esso. –

+2

@IlyaSmagin Perché no? Anche se non puoi decompilare in C# che costruisci puoi sicuramente decompilare in IL che costruisce. – Justin

4

È possibile utilizzare lo strumento gratuito ILSpy per decompilare il codice e le risorse da un file .NET-dll.

+3

E come esattamente questo mi avrebbe aiutato con il mio problema? –

Problemi correlati