Синтаксис в masm

Тема в разделе "WASM.BEGINNERS", создана пользователем niakris, 10 фев 2011.

  1. niakris

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    В программе объявляю константу:
    Код (Text):
    1. P_1_V10__VAR_IMAGEBASE          equ offset project_1_v10__shell2___imagebase    - offset project_1_v10__shell2
    которая содержит количество байт от начала кода до переменной. В коде пытаюсь обратится к переменной таким образом:
    Код (Text):
    1. cmp esi, dword ptr [ebp + P_1_V10__VAR_IMAGEBASE]
    В регистре ebp - адрес начала кода.
    В результате при компиляции получаю ошибку A2155: cannot use 16-bit register with a 32-bit address. Не могу понять в чем причина такой ошибки и как в таком случае будет правильнее обратится к переменной.
     
  2. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    можно попробовать так

    Код (Text):
    1. mov eax,dword ptr [ebp + P_1_V10__VAR_IMAGEBASE]
    2. cmp esi,eax
     
  3. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    тут разницы никакой же.
    вот я бы посоветовал так:
    Код (Text):
    1. mov eax, ebp
    2. add eax, P_1_V10__VAR_IMAGEBASE
    3. cmp esi, [eax]
    просто мне самому непонятна суть сообщения ассемблера в данном случае. возможно дело в том, что постоянное смещение не может занимать больше одного байта, а тут оно очевидно больше.
     
  4. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Константа должна быть в скобках.
    Примерно так.
    Код (Text):
    1. P_1_V10__VAR_IMAGEBASE            equ    (offset project_1_v10__shell2___imagebase    - offset project_1_v10__shell2)
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    оу... я смотрю вы выучили асм по книге "Учимся программировать драйверы на языке ассемблер на примере руткитов уровня ядра For Dummies")))
     
  6. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    530
    Адрес:
    Russia
    Попробуй с jwasm
     
  7. niakris

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    Все оказалось проще, вместо:
    Код (Text):
    1. cmp    esi, dword ptr [ebp + P_1_V10__VAR_IMAGEBASE]
    написал так:
    Код (Text):
    1. cmp    esi, dword ptr [P_1_V10__VAR_IMAGEBASE + ebp]
    :)

    s_d_f, спасибо за помощь, при использовании скобок всё нормально начало компилиться в первом варианте записи :) ...а мне так привычней :))