Как обратьтся к структуре в masm64

Тема в разделе "WASM.X64", создана пользователем Zufyxe, 12 апр 2006.

  1. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Вопрос к знатокам MASM64.

    Имеем структуру типа:
    Код (Text):
    1. mystruct STRUCT
    2.   member1 DWORD ?
    3.   member2 DWORD ?
    4.  mystruct ENDS


    необходимо обратиться, скажем, к member2 через указатель расположенный в RDX.



    раньше это делалось так:
    Код (Text):
    1. ASSUME EDX:PTR mystruct
    2. mov eax,dword ptr [EDX.member2]




    теперь же, масм 8.00.40904 ругается на строку:
    Код (Text):
    1. ASSUME RDX:PTR mystruct


    : error A2008: syntax error : rdx



    Что можно (нужно) сделать?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В черновике статьи Криса Касперски на тему x64 (в соседнем топике лежит архив) написано, что в длинном режиме изменилась адресация. Возможно, это как-то повлияло на "тип" PTR. Или в MS вообще решили отменить поддержку assume, как они собирались отменить макрос invoke в masm64. В любом случае, можно переписать этот код без assume:
    Код (Text):
    1. mov eax,dword ptr [rdx + 4]




    ЗЫ: А это точно masm64? :)
     
  3. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
  4. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Zufyxe

    1. "масм 8.00.40904" - это версия с сайта Microsoft или с другого?

    2. "error A2008: syntax error : rdx" - может есть что-то вроде PTR64, LPTR, или другое. Возможно в справке что-нибудь написано.



    PS: Кстати, Zufyxe, ты первый кого я увидел в работе с masm64. Расскажи что-нибудь про него: что поменялось, можно ли его использовать как masm32, ...
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Vasil

    Он есть в последнем PSDK, но архив очень тяжёлый и тянуть его ради одного ml64.exe нет желания.
     
  6. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Quantum

    Слушай, подскажи что делать: У меня есть "Visual Studio 2005 Professional +msdn". Устанавливаться не хочет на Windows 2003 Server - просит SP1. Может что-нить в реестре поменять?
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Vasil

    А будет ли он работать без SP? Кстати, где-то в форуме была тема по изменению версии билда. Если правильно помню, то простого решения для этого нет.
     
  8. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Мне оттуда ничего, кроме *.h файлов, MSDN и может быть ml64 не надо :)



    "простого решения для этого нет" - просто SP1 весит 394 Мбайт, качать ломает, а покупать целый диск с другими версиями 2003 не хочется.
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Можно попробовать перехватить GetVersionEx или лучше даже распаковать инсталлер, если это оффлайновая версия. Или попросить кого-то выложить нужные файлы.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    masm64.. Не, от обычного масма почти избавился, всё в фасме и 64 тоже.
     
  11. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Помню я этот инсталлер в InstallShield открывал, но без упешно. Каталоги с файлами он показывает, а как их вытащит я не знаю...
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А по кабам отдельно нельзя вытащить? Я не смотрел (дёрнул img), но раньше можно было.

    Кстати, в PSDK 2k3sp1 ml-то есть, а справки к нему нет. Надо вкупе и MSDN тянуть - несерьёзно.
     
  13. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Могу бинарники в ZIP запаковать и выложить где-нить, метров 7 получится. Либы все в DDK к w2k3 есть.
     
  14. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
  15. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Вряд ли это глюк...

    А на ASSUME EDX:PTR mystruct masm64 не ругается?
     
  16. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Ругается.
    Код (Text):
    1. syntax error : edx


    Что-то тут не так.
     
  17. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Zufyxe

    У меня с английским плоховато. Но мне кажется, что регистры RXX использовать для индексирования в отдельности нельзя. Их используют в комбинации с EXX регистрами.

    Ты посмотри внимательнее в пункте "32-Bit Address Mode (Address Size Override)" по моему там написано также.



    Вот ссылка на страничку:

    http://msdn2.microsoft.com/en-us/library/hb5z4sxd(VS.80).aspx
     
  18. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Ну как же это нельзя?

    Теперь все указатели 64-битные. Значит mov rax,[rdx] корректно компилится и работает. И mov eax,dword ptr [rdx], тоже работает.

    А вот ASSUME не работает :dntknw:
     
  19. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Да...

    Что-то тут не так :)
     
  20. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    похоже что masm64 не поддерживает директиву assume.

    Например ml64 (в отличие от ml) спокойно компилит такой код:
    Код (Text):
    1. assume equ 0
    2. end