Ламерские вопросы по MASM

Тема в разделе "WASM.ASSEMBLER", создана пользователем Broken Sword, 27 фев 2005.

  1. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    Вопрос 1, риторический: Почему Хатч думает, что прога на асме не может занимать больше 65535 строк (именно "слово" отведено для хранения номера строки при выводе информации об ошибках при компилляции; нет, не виснет, просто происходит переполнение и 65536 строка имеет уже номер 1). У кого есть удачный опыт компиляции БОЛЬШИХ прог на MASM? У меня в некоторых случаях, закономерность которых выявить не удалось, он просто наглухо вешается.



    Вопрос 2. По существу: как "расширить" область видимости метки, т.е. чтобы конструкция вида:



    sub1 proc near

    ...

    jmp met2

    ...

    sub1 endp



    sub2 proc near

    ...

    met2:

    ...

    jmp met2

    sub2 endp



    оказалась рабочей? какой-нить одной директивой в начале желательно...
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > Почему Хатч думает



    А причем здесь Hutch? :)



    насчет второго вопроса то метку нужно обозначить как глобальную



    met2::
     
  3. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    тю :) а кто тогда творец сего шедевра?

    а насчет второго вопроса - точно нельзя как-то проще?
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    MASM - это microsoft assembler.

    Компилятор глючный, и если нет объективных причин, лучше от него отказаться, т.к. со временем будет только хуже ;)
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > точно нельзя как-то проще?



    Куда уж проще вместо одного : два поставить ::
     
  6. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    просто коду - 1300000 строк, и меток этих там до****. я запарюсь
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Ну можно еще вначале исходника вписать

    OPTION NOSCOPED



    тогда masm будет считать все метки глобальными
     
  8. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    о! то что нужно, спасибо...
     
  9. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
  10. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    При использовании директивы org компилятор просто вставляет нули, т.о. раздувается размер исполнимого модуля. Вопрос: как задать базу нового сегмента без использования org, и без последующих правок заголовка вручную?
     
  11. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    неужели никак нельзя задать RVA базы сегмента в загружаемом образе без org-ов ?
     
  12. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Это же не fasm, я сразу предупреждал :)
     
  13. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    Нужно передать через invoke слова. Странно, но



    invoke Func, word ptr [var]



    транслируется в



    push 0

    push word ptr [var]



    Проблема в том, что у push 0 нет префикса переопределения (66h), т.е. должно быть 66h 6Ah 00h, а получается 6Ah 00h и стек пориться, т.к. фактически вместо word + word (0 + число) ложиться dword + word. На форуме масма некто старожил сказал, что мол все правильно, 6A 00 - это push imm8, и поэтому ESP будет декрементироваться на 2.



    Где TheSvin? Насколько я понял из документации - push вообще не смотрит на операнд - только на разрядность текущего сегмента кода. Т.е. для 32-х разрядного сегмента кода мы никак не положим в стек слово, КРОМЕ как с помощью db 66h перед командой push
     
  14. Quantum

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

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



    Это известный баг макроса. Можно написать безглючный аналог invoke, но стОит ли?
     
  15. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
  16. Quantum

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

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

    wMinute: 0 - 59

    wSecond: 0 - 59

    В данном случае проблем с movsx не будет, хотя логичнее, конечно, использовать movzx.
     
  17. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    Как определить константу текстовую, чтоб потом ее можно было вставлять в конструкции db? Например, что-то вроде этого:



    VER equ "1.0"



    mes db 'Version', VER, 0



    ?
     
  18. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    VERSION TEXTEQU <"1.2.2[private]]



    szPluginNameAndVersion db "Hide Debugger v",VERSION,0