|
|
| Посл.отвђт | Сообщен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 |