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

Преобразование кода Intel 80x86 PE

В настоящее время я пытаюсь понять перевод следующей инструкции PE Code:

004033C0 | .-E9 3BDCFFFF | JMP seh_exam.00401000

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

введите здесь описание изображения

(Источник изображения: http://www.mathemainzel.info/files/x86asmref.html#jmp )

Насколько я понимаю, байт E9 = безусловный переход, а 3B = o0 и DC = 01, где o0 и 01 представляют смещение для установки EIP.

Код подскакивает на 9152 байта, но как именно работает трансляция отрицательных смещений? Любой совет будет принят во внимание.

PS: не домашний вопрос.


  • Пожалуйста, не публикуйте скриншоты с открытым текстом. Вы лучше этого, мы знаем это, потому что вы готовы заняться сложной областью программирования. 16.07.2014
  • @KerrekSB Извините, удалил первый скриншот. 16.07.2014

Ответы:


1

Инструкция в вашем вопросе — это JMP rel32, которая не включена в показанную вами таблицу. Вероятно, вам следует использовать лучший справочник, например Руководства Intel для разработчиков программного обеспечения.

Байты 3B DC FF FF в макете little-endian (который используют процессоры x86) сформировать 32-битное двойное слово FFFFDC3B. В представлении дополнения до двух значение FFFFDC3B равно -23C5.

Ваша инструкция перехода начинается с 4033C0 и имеет длину 5 байт. Поскольку смещение перехода относится к началу следующей инструкции, вы получаете цель перехода 4033C0 + 5 - 23C5 == 401000. В качестве альтернативы вы можете написать это как truncate_to_32_bits(4033C0 + 5 + FFFFDC3B).

16.07.2014
  • Спасибо, что прояснили это. Ответил на все дополнительные вопросы, которые могли возникнуть. 16.07.2014
  • Новые материалы

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

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

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

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

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

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

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