Nano Hash - криптовалюты, майнинг, программирование

Сравните byte[] с T

Я хочу составить список указателей на места, которые содержат определенное значение в памяти процесса другого процесса. Значение может быть короткое, целое, длинное, строковое, логическое или что-то еще.

Моя идея состоит в том, чтобы использовать для этого Generics. У меня есть одна проблема сделать это, как я могу сказать компилятору, в какой тип ему нужно преобразовать массив байтов?

Вот что я сделал:

    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;
    }

Как я могу сказать компилятору, что ему нужно преобразовать byte[] в тип T?

13.08.2012

  • Ваш компилятор это он? :) 13.08.2012
  • @Эд странно; когда я спрашиваю свой, он говорит, что меня зовут легион, потому что нас много. 13.08.2012
  • Как минимум 3 парня (включая меня) редактировали пост, а мы его не меняли =) 13.08.2012
  • @MarcGravell: Что ж, я искренне надеюсь, что мой компилятор не заражен демонами. :D 13.08.2012
  • Что для вас означает преобразование byte[] в T? Что должно произойти, если T, например, типа Button или FileStream? 13.08.2012
  • Я полагаю, что он пытается десериализовать/скопировать объект, который существует в памяти и принадлежит другому процессу. ReadMemory возвращает byte[], и OP хочет, чтобы это byte[] было переведено в фактический объект (типа T), который представляют данные. 13.08.2012
  • Вы сравниваете ссылку на управляемый объект с указателем в другом процессе? Я думаю, что это не приведет к результатам, которые вы ищете. Однако, если T является структурой, и вы сравниваете содержимое структуры с фрагментом памяти в другом процессе, который может иметь шанс работать, предположим, что содержимое такое же. Тем не менее, я думаю, вам нужно будет сначала ввести управляемый объект в память, а затем сравнить байт с байтом. 13.08.2012

Ответы:


1

Ваш вопрос немного сбивает с толку, но я постараюсь ответить, что смогу.

Вместо того, чтобы брать общий тип, я бы, вероятно, написал метод, который принимает экземпляр интерфейса, такого как IConvertableToByteArray или что-то в этом роде.

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

Затем, если вам нужно, чтобы определенный тип был совместим с этим методом, вы могли бы создать инкапсулирующий класс

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

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

2

Можно использовать Marshal.StructureToPtr для получить неуправляемое представление структуры (которая должна быть «простой» структурой). Однако вам могут понадобиться строки особого случая.

Вы также должны подумать об ограничениях выравнивания того, что вы ищете - продвижение по памяти по 1 байту за раз будет очень медленным и расточительным, если элемент должен быть выровнен по 4 или 8 байтам.

13.08.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..