![]() |
|
Модераторы: bsa |
![]()
|
|
| Logree |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
в общем имеется такой код:
отладочная информация перед входом в цикл
после первого прохода:
почему так? ведь должно плучиться 0x00346858?! может так нельзя? -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
||||||
|
|||||||
| vnf |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
attr = attr + attr->length; замени на
attr = attr + attr->length/siizeof(attr) |
|||
|
||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
результат 0x003469c0, а что это даст? ведь размер по-любому 4 байта.
ps вообще-то NR_ATTR_HEADER - структура. Это сообщение отредактировал(а) Logree - 17.9.2010, 20:22 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
| ilyagoo |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 2.5.2010 Где: Санкт-Петербург Репутация: нет Всего: нет |
у вас есть указатель на какой-нибудь тип.
например:
делая инкремент ptr, вы получаете адрес следующего элемента
в адресной арифметике это выглядит примерно так: указатель на тип + число = адрес памяти + число * размер типа доходчиво? |
||||
|
|||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
нет не понял, покажите пожалуйста на моём примере как нужно
вот так работает:
правда после 3 итерации опять адреса начинают ехать... кто нибудь может внятно и просто(с примером) объяснить - почему? Это сообщение отредактировал(а) Logree - 17.9.2010, 21:31 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
| ilyagoo |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 2.5.2010 Где: Санкт-Петербург Репутация: нет Всего: нет |
это то же самое, что и
смещение у вас должно быть единицами NR_ATTR_HEADER, а не адресом. а так? Это сообщение отредактировал(а) ilyagoo - 17.9.2010, 22:04 |
||||
|
|||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
Все, до меня дошло
Но почему со временем адреса едут? из-за погрешности деления? -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
| ilyagoo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 2.5.2010 Где: Санкт-Петербург Репутация: нет Всего: нет |
какие погрешности? деление у вас там целочисленное. 13 / 5 = 2 ))
вообще по коду совершенно не понятно, что он мог бы делать. а раз так - то он НЕВЕРЕН. перепишите, не поленИтесь. и лучше не использовать адресную арифметику, уж больно она платформо-зависима. пишите attr[ index ]. |
|||
|
||||
| Logree |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
это смотря в какую сторону округлять)
я последовательно "перемещаю" структуру по области памяти. Вот к примеру на протяжение 3 шагов смотрю в отладчик: 0:
1:
2:
3:
ведь первые 2 раза складывает верно, а других операций там нет, с чем может бытть связано? Это сообщение отредактировал(а) Logree - 17.9.2010, 23:56 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
||||||||||||
|
|||||||||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
| ilyagoo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 2.5.2010 Где: Санкт-Петербург Репутация: нет Всего: нет |
мало ли что и где написано, все зависит от реализации.
мне, например неочевидно что содержится в attr->length и что такое 0xFFFF. |
|||
|
||||
| semibug |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
ilyagoo, точно платформо-независимая, язык гарантирует это.
Другое дело, что *(attr + index) может выглядеть сложнее attr[ index ]. Но по количеству проблем они абсолютно идентичны, ни в первом ни во втором случае никаких проверок индекса не производиться. Поэтому если нет специальных показаний (по быстродействию), использовать в чистом виде такие варианты доступа к данным не желательно. |
|||
|
||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
данный кусок кода перебирает атрибуты файловой записи таблицы MFT, для NTFS, в buffer содержиться сама файловая запись, атрибуты располагаются друг за другом, так что для того чтобы перейти к следующему атрибуту нужно к текущему смещению атрибута прибавить его длинну и чтобы не копировать каждый раз данные я просто перемещаю структуру как маску куда мне нужно, список атрибутов заканчивается терминатором 0xFFFFFFFF, но пока что сойдёт и 0xFFFF. однако, все это ни как не относится к проблеме, но если поможет её решить - буду рад Это сообщение отредактировал(а) Logree - 18.9.2010, 02:01 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
| vnf |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
1. выравнивание? структуры точно лежат подряд без пустых байтов между ними?
2. Там только структуры NR_ATTR_HEADER или могут лежать другие, у которых первым элементом является NR_ATTR_HEADER? судя по отладке именно этот случай. Это сообщение отредактировал(а) vnf - 18.9.2010, 10:47 |
|||
|
||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
1. Друг за другом,вплотную, поле length по сути является смещением следующего атрибута.
2. нет там только структуры NR_ATTR_HEADER, они закончаться когда type == FFFF если не правильное значение 0x003468d0 заменить на то что и должно было получиться - 0x003468e0 то всё становится на свои места. я не понимаю, 2 раза он проделывает ОПЕРАЦИЮ СЛОЖЕНИЯ верно а в раз - нет! -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |