MASM mov из адреса памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем la2elpy, 30 дек 2011.

  1. la2elpy

    la2elpy New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    6
    Непонятки с masm в студии

    mov ecx, dword ptr [12345678h]

    генерит на деле

    mov ecx, 12345678h
     
  2. n2

    n2 New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2011
    Сообщения:
    26
    Разве так не должно быть? Оно вам копирует двойное слово, что не так? Или у вас ecx особый?
     
  3. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    Для компилятора это смещение бессмысленно, так как он не может определить дефолтный сегмент. Ему нужно помочь: mov ecx,dword ptr cs:[12345678h]
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    kejcerfcrv
    Зачем его определять, если дефолтный сегмент и так для каждой инструкции официальной документацией определён? В данном случае компилятор просто обязан сгенерировать инструкцию с дефолтным сегментом (т.е. ds).
     
  5. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    l_inc
    Дефолтные сегменты для него зависят от секции в модуле, а не от формата инструкций.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    kejcerfcrv
    То, что это так, не означает, что это правильное поведение, и формат инструкции здесь не причём. Есть документация, определяющая, как правильно интерпретировать аргументы инструкции по-умолчанию:
    Т.е. переопределение есть переопределение, а по-умолчанию должен быть ds без всяких подсказок. А уж преобразовывать явно указанное обращение к памяти mov ecx, dword ptr [12345678h] в immediate value mov ecx, 12345678h — очевидный ляп, недостойный оправдания.
     
  7. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    l_inc
    То что вы не согласны с этим не означает что я не знаю про дефолтные сегменты камня, у меня знаетели двигатель есть для сей задачи - SDE. Сегмент должен быть чётко определён. То что не IA синтаксис это понятно. Для обращения к памяти нужно знать сегмент. Без сегмента инструкция превращается в загрузку смещения, это и делает компилятор. Вы ведь не говорите ничего про Lea.
     
  8. la2elpy

    la2elpy New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    6
    Спасибо за ответы, да, действительно
    mov ecx,dword ptr ds:[12345678h] работает

    Но все таки это какое то западло, ни варнингов, ни ошибок, очень фигово при копировании кода из ida, можно не заметить.
    Подавляющее большинство дизассемблеров выводят код именно как mov ecx,dword ptr [12345678h]. В OllyDbg есть опция, чтобы показывать дефолтные сегменты в коде, а вот в ida не нашел, никто не в курсе?