2012-08-13 14 views
5

Desidero creare un elenco di puntatori a posizioni che contengono un determinato valore nella memoria di processo di un altro processo. Il valore può essere un breve, int, long, string, bool o qualcos'altro.Confronto byte [] a T

La mia idea è di usare Generics per questo. Ho un problema nel renderlo, come posso dire al compilatore di che tipo ha bisogno per convertire l'array di byte?

Questo è quello che ho fatto:

public List<IntPtr> ScanProccessFor<T>(T ItemToScanFor) 
    { 
     List<IntPtr> Output = new List<IntPtr>(); 

     IntPtr StartOffset = SelectedProcess.MainModule.BaseAddress; 
     int ScanSize = SelectedProcess.MainModule.ModuleMemorySize; 

     for (int i = 0; i < ScanSize; i++) 
      if (ReadMemory(SelectedProcess, StartOffset + i, (UInt16)Marshal.SizeOf(ItemToScanFor)) == ItemToScanFor) 
       Output.Insert(Output.Count,StartOffset + i); 

     return Output; 
    } 

Come posso dire al compilatore che ha bisogno di convertire il byte [] per digitare T?

+6

Il tuo compilatore è un "lui"? :) –

+6

@Ed dispari; quando chiedo il mio, dice "Il mio nome è legione, perché siamo molti" –

+2

Almeno 3 ragazzi (me compreso) hanno modificato il post e non lo abbiamo modificato =) –

risposta

2

La tua domanda è un po 'di confusione, ma cercherò di rispondere a quello che posso

Invece di prendere un tipo generico, probabilmente scrivere un metodo che accetta un'istanza di un'interfaccia simile IConvertableToByteArray o qualcosa .

public IConvertableToByteArray 
{  
    public byte[] ToByteArray(); 
} 
Poi

Se avete bisogno per consentire a un tipo specifico di essere compatibile con tale metodo, si potrebbe fare una classe incapsulante

public IntConvertableToByteArray : IConvertableToByteArray 
{ 
    public int Value{get; set;} 

    public byte[] ToByteArray() 
    { 
     insert logic here 
    } 
} 
1

Si potrebbe utilizzare Marshal.StructureToPtr per ottenere una rappresentazione non gestita della struttura (che deve essere una struttura 'semplice'). Potresti aver bisogno di stringhe di casi speciali.

Si dovrebbe anche pensare ai vincoli di allineamento su ciò che si sta cercando - l'avanzamento attraverso la memoria di 1 byte alla volta sarà molto lento e dispendioso se l'elemento deve essere allineato a 4 o 8 byte.

Problemi correlati