Интерестная адресация :-\

Тема в разделе "WASM.ASSEMBLER", создана пользователем Grevgeny, 11 окт 2004.

  1. Grevgeny

    Grevgeny New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2003
    Сообщения:
    16
    Адрес:
    Russia
    Здравствуйте господа!

    Совершенно случайно заметил сей забавный прикол, начну попорядку. Первое:
    Код (Text):
    1.  
    2. .data
    3. str1 db "qwert"
    4. str2 db "yuio",0
    5.  


    Теперь если заставить вывести строку в месадж бокс с стр1 получим: qwertyuio. Вроде ястно строки склеились из-за отсутствия 0 у первой. А вот второй глюк становится интерестным:
    Код (Text):
    1.  
    2. .data
    3. str1 db ?
    4. str2 db "yuio",0
    5.  


    Теперь как я понимаю str1 должно выделяться место когда мы в нее будем пихать данные по ходу работы. Но теперь

    используя: invoke MessageBox, NULL, addr str2, addr MsgBoxCaption, MB_OK На выходе получаем данные addr [str1+1], str2 данные мы вообще не видем.

    Такая же фигня получится если в секцию .data?

    пихнуть buf1 db ? и buf2 db ? обратившись к buf2 получаем buf1+1 Объясните мне плиз из-за чего сие происходит. Компилятор масм ml 7.10.3077.0

    вот исходник демонстрирующий второй пример

    [​IMG] 939444746__getname.asm
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Я прекрасно вижу в MessageBox'e строку по адресу str2: "yuio". Никаких проблем. Что касается
    - так buf2 это и есть buf1+1, чего здесь удивительного? Сделай так:


    Код (Text):
    1.     lea eax, buf1  
    2.     PrintDec eax
    3.     lea eax, buf2  
    4.     PrintDec eax




    и увидешь примерно такой результат:



    eax = 4206615 (Test Project.inc, 38)

    eax = 4206616 (Test Project.inc, 40)



    Адреса buf1 и buf2 идут друг за другом, и ничего удивительного нет в том, что buf1+1=buf2. Было бы странно, если бы это было не так.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    По умолчанию (которое изменить нельзя :)

    db ? == db 0
     
  4. Grevgeny

    Grevgeny New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2003
    Сообщения:
    16
    Адрес:
    Russia
    В примере шо я выложил Buf2 как раз и лежит перед MsgBoxCaption. И если я тебя правильно понимаю invoke wsprintf,offset Buf2,offset Helo,eax перезапишет данные которые находятся в MsgBoxCaption? Хмм... интерестно ельзя ли это использовать для неявной передачи данных от процедуры к процедуре.
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    2 Grevgeny

    Стоит над этим поработать...
     
  6. Grevgeny

    Grevgeny New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2003
    Сообщения:
    16
    Адрес:
    Russia
    Уже копаю. :) Весьма забавные моменты возникают. Для крутой защиты не знаю, а вот запудрить мозги отладчикам и эвристикам усяким пожалуй можно. По крайней мере там где не присутствують "Глаза наблюдателя" :derisive:))
     
  7. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Grevgeny

    "Теперь как я понимаю str1 должно выделяться место когда мы в нее будем пихать данные по ходу работы."



    Это не похоже на правду. Вы хотите сказать, что при копировании в переменную, обозначенную ? место будет выделяться автоматически?.. Не похоже...
     
  8. Grevgeny

    Grevgeny New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2003
    Сообщения:
    16
    Адрес:
    Russia
    Угу похоже на то что как у меня в примере:

    .data

    Buf2 db ?

    MsgBoxCaption db "Имя компа %s",0



    При записи в Buf2, данные MsgBoxCaption перезаписываются,

    что дает нам возможность скрыто передать данные. Допустим 1 процедура записывает какое-то значение в Buf2 ну со смещением на один байт, а через какое то продолжительное время мы эти же данные возьмем через MsgBoxCaption. Весьма трудно будет сообразить как они там оказались