· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Интерестная адресация :-\

Посл.отвђт Сообщенiе


Дата: Окт 11, 2004 07:26:11

Здравствуйте господа!
Совершенно случайно заметил сей забавный прикол, начну попорядку. Первое:
.data
str1 db "qwert"
str2 db "yuio",0

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

Теперь как я понимаю 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
вот исходник демонстрирующий второй пример

939444746__getname.asm


Дата: Окт 11, 2004 08:20:53

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

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


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

eax = 4206615 (Test Project.inc, 38)
eax = 4206616 (Test Project.inc, 40)

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


Дата: Окт 11, 2004 08:41:06

По умолчанию (которое изменить нельзя :)
db ? == db 0


Дата: Окт 11, 2004 08:45:52

В примере шо я выложил Buf2 как раз и лежит перед MsgBoxCaption. И если я тебя правильно понимаю invoke wsprintf,offset Buf2,offset Helo,eax перезапишет данные которые находятся в MsgBoxCaption? Хмм... интерестно ельзя ли это использовать для неявной передачи данных от процедуры к процедуре.


Дата: Окт 11, 2004 13:14:00

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


Дата: Окт 11, 2004 16:01:24

Уже копаю. :-) Весьма забавные моменты возникают. Для крутой защиты не знаю, а вот запудрить мозги отладчикам и эвристикам усяким пожалуй можно. По крайней мере там где не присутствують "Глаза наблюдателя" ;-)))


Дата: Окт 11, 2004 17:56:52

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

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


Дата: Окт 12, 2004 07:23:30

Угу похоже на то что как у меня в примере:
.data
Buf2 db ?
MsgBoxCaption db "Имя компа %s",0

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


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.112