Синтаксис в masm

Discussion in 'WASM.BEGINNERS' started by niakris, Feb 10, 2011.

  1. niakris

    niakris Дмитрий

    Blog Posts:
    0
    Joined:
    Sep 3, 2008
    Messages:
    45
    В программе объявляю константу:
    Code (Text):
    1. P_1_V10__VAR_IMAGEBASE          equ offset project_1_v10__shell2___imagebase    - offset project_1_v10__shell2
    которая содержит количество байт от начала кода до переменной. В коде пытаюсь обратится к переменной таким образом:
    Code (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

    Blog Posts:
    0
    Joined:
    Nov 30, 2010
    Messages:
    109
    можно попробовать так

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

    krabz New Member

    Blog Posts:
    0
    Joined:
    May 26, 2010
    Messages:
    135
    тут разницы никакой же.
    вот я бы посоветовал так:
    Code (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

    Blog Posts:
    0
    Joined:
    May 15, 2008
    Messages:
    342
    Константа должна быть в скобках.
    Примерно так.
    Code (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

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    оу... я смотрю вы выучили асм по книге "Учимся программировать драйверы на языке ассемблер на примере руткитов уровня ядра For Dummies")))
     
  6. Jupiter

    Jupiter Jupiter

    Blog Posts:
    0
    Joined:
    Aug 12, 2004
    Messages:
    532
    Location:
    Russia
    Попробуй с jwasm
     
  7. niakris

    niakris Дмитрий

    Blog Posts:
    0
    Joined:
    Sep 3, 2008
    Messages:
    45
    Все оказалось проще, вместо:
    Code (Text):
    1. cmp    esi, dword ptr [ebp + P_1_V10__VAR_IMAGEBASE]
    написал так:
    Code (Text):
    1. cmp    esi, dword ptr [P_1_V10__VAR_IMAGEBASE + ebp]
    :)

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