Чем отличается ADDR от OFFSET?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Lex2029, 13 окт 2007.

  1. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Подскажите новичку плиз :)
     
  2. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Если я не ошибаюсь, то использованием, offset используется в "читом" асме, вроде:
    Код (Text):
    1. push MB_OK
    2. push offset ofcation
    3. push offset oftext
    4. push 0
    5. call MessageBox
    , ADDR - в invoke:

    invoke MessageBox, NULL, ADDR oftext, ADDR ofcation, MB_OK
     
    Quddy нравится это.
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    addr используется в invoke для адресации локальных переменных чезер регистр eax (в masm).
    Пример:
    Код (Text):
    1. szError db 'Error!', 0
    2. szFmt   db 'Error #%x', 0
    3. ...
    4. local szMsg[0x100]:BYTE
    5. ...
    6. invoke  GetLastError
    7. invoke  wsprintf, addr szMsg, offset szFmt, eax
    8. invoke  MessageBox, 0, addr szMsg, offset szError, MB_OK
    будет переведено в:
    Код (Text):
    1. call    GetLastError
    2. push    eax
    3. push    offset szFmt
    4. lea     eax, [szMsg]
    5. push    eax
    6. call    wsprintf
    7. add    esp, 3*4
    8. push    MB_OK
    9. push    offset szError
    10. lea     eax, [szMsg]
    11. push    eax
    12. push    0
    13. call    MessageBox
     
  4. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    т.е. если кратко, то offset Для переменных, которые на всю програму, а addr, для тех, которые как LOCAL описаны?
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Lex2029
    написать вот так push offset [ebp+XX] низяя
    а вот так можно: lea eax,[ebp+XX]/push eax
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нет. offset для уже определенных переменных. addr для переменных которые могут идти уже после обращения к ним.
    пример
    Код (Text):
    1. var1 db 1
    2.  
    3. mov eax, offset var1
    4. mov ebx, addr var2
    5.  
    6. var2 db2
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    n0name
    наоборот ;)
    в invoke offset может адресовать ещё не описанные переменные, а addr нет, зато addr может адресовать локальные переменные в стеке, автоматически добавляя lea, а offset этого не умеет :)
    А без invoke addr вообще не работает, во всяком случае в масме.
     
  8. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    addr - это макрос
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Lex2029
    addr тоже для всех, но только если они описаны ранее. И вообще, addr — примочка для invoke, чтобы читабельнее и удобнее код был.
     
  10. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Ступил...