Выпад при передаче

Тема в разделе "WASM.ASSEMBLER", создана пользователем arrrg, 22 июл 2009.

  1. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    Код (Text):
    1. push counts
    2.         mov eax,numberr
    3.         pop [eax]
    в numberr передаётся указатель на переменную, которой надо передать значение,хранящееся в counts
    пробовал по всякому, но всёравно выпад
    p.s. если прицеплен отладчик , выпад происходит в совершенно другом месте, несколькими строками раньше, но без отладчика выпадает дальше
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    arrrg
    Покажи как определены counts и numberr, и как инициализирована numberr.

    > если прицеплен отладчик , выпад происходит в совершенно другом месте, несколькими строками раньше
    Покажи.
     
  3. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    Код (Text):
    1. counts dd 0
    2. numberr:DWORD ;является параметром функции
     
  4. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    во время работы функции происходит вывод.с прицепленным отладчиком вывод не происходит, а листинг предоставленный мною выше, находится в самом конце функции.
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    arrrg
    Покажи как происходит вызов функции, как передается параметр.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    arrrg
    Нужно адрес загрузить, а не значение. Масм загрузит значение переменной. Где переменные, может в стеке, интуиция гадалки подсказывает что в секции данных модуля, тогда:
    Код (Text):
    1.     mov dword ptr ds:[numberr],offset counts
    Если страница не доступна для записи возникнет сепшин.
     
  7. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    invoke Stringscount,offset Stringg,offset counts(второй параметр необходимо изменить в конце функции)
    так в numberr и хранится адрес
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Сначала определить причину падения с отладчиком.
     
  9. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    причина - попытка обратиться к несуществующему адресу
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    arrrg
    В масме инструкция
    Код (Text):
    1. mov eax,numberr
    загрузит в регистр значение переменной, а не её адрес. Как должно быть в #6.
     
  11. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    так значение и есть адрес!
    адрес ДРУГОЙ переменной!
    это внешняя функция!
     
  12. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    так, как в #6 я сделал и толку 0!
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    arrrg
    Откуда вы только такие берётесь.. этот синтаксис компилятора и хз как он будет скомпилирован, следует интеловский код вылаживать в подобных случаях. counts - это переменная в стеке или в сегменте данных ? Инструкция
    Код (Text):
    1. mov eax,numberr
    загрузит в регистр значение, как и предыдущая. Также и
    Код (Text):
    1. pop [eax]
    - не понятно какой сегмент. Подробное описание переменных(где они находятся) и их значения в студию.
     
  14. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    сколько раз надо повторить - значение это указатель
     
  15. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Окей, после сбора всего вышесказанного возникают очередные вопросы. Какой адрес хранится в переменной "numberr" на момент выпада? Придётся повторить ранее сказанное: память по этому адресу доступна только для чтения или, может быть, не выделена? Если это так, то "ошибка", совершенно очевидно, находится в другом месте – там, где один кладёт в переменную "numberr" неверный адрес.
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    arrrg
    Ну дык надо посмотреть что за адрес и поставить бряк на изменение этой памяти. Подозреваю что кто-то портить память занятую под этот указатель.
     
  17. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    Код (Text):
    1. invoke Stringscount,offset Data,offset counts
    вызов
    как указатель может быть тут неправильным?
     
  18. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
  19. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    повторяю
    в переменной "numberr" находится offset counts,переданный в момент вызова
    невыделена и доступной только для чтения переменная counts быть не может, потому что операции чтения и записи в главном модуле никаких выпадов не вызывает
     
  20. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Код (Text):
    1. push counts
    2. mov eax,numberr
    3. pop [eax]
    Что это вобще за перл? Обфускация для самого себя чтоли :lol: