Domanda

Qual è il modo migliore per cercare un file di grandi dimensioni binario per una certa stringa in C #?

Per fornire alcune specifiche, sto cercando di estrarre le informazioni nano di un eseguibile, quindi mi interessa solo alcune parti del file binario (cioè le sezioni a partire con le corde .debug_info, .debug_abbrev, ecc.)

Non vedo nulla di evidente Stream, FileStream o BinaryReader, così sembra che dovrò leggere pezzi in e ricercare i dati per le stringhe di me stesso.

C'è un modo migliore?

È stato utile?

Soluzione

Non c'è niente integrato in .NET che farà la ricerca per voi, in modo che stai andando ad avere bisogno di leggere nel file di blocco per blocco e la scansione per ciò che si desidera trovare.

È possibile accelerare la ricerca in due modi.

In primo luogo, l'uso bufferred IO e trasferire grandi blocchi alla volta - non leggere byte per byte, leggere 64KB, 256 kB o 1MB pezzi

.

In secondo luogo, non fare una scansione lineare per il pezzo che si desidera - Vai alle Boyer- Moore (link Wikipedia) algoritmo per ricerche di stringhe -. è possibile applicare questo per cercare le informazioni che si desidera NANO

Altri suggerimenti

Credo che dovrete farlo da soli, BinaryReader non è stato progettato per la ricerca di testo in un file binario. Tuttavia, si dovrebbe essere consapevoli della codifica del testo si utilizza durante la ricerca.

Ci deve essere un nano della libreria C si potrebbe compilare ed utilizzare interoperabilità con? Ho fatto qualche ricerca e ho trovato questo . Se una libreria da lì potrebbe essere compilato in una DLL su Windows (presumo si utilizza Windows), allora si potrebbe utilizzare System.Runtime.InteropServices per interagire con il DLL ed estrarre le informazioni da lì.

Forse?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top