реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обнаружил глюк в дизассемлер AVR Studio, Не правильно дизассемлит 2-х словные команды lds sts
MacGregor
сообщение Sep 13 2008, 09:34
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 9-09-08
Пользователь №: 40 090



Взял HEX.
Дизассемблировал его с помощью AVR Studio.
А потом опять откомпилировал.

В результате получил HEX отличный от исходного.

Анализ показал, что студия в командах lds и sts младший байт адрес обнуляла. Хотя в исходном HEX-е эти байты отличны от нуля.

Короче, пришлось ручками править анализируя разницу в исходном и полученном HEX-ах sad.gif
Go to the top of the page
 
+Quote Post
Flasher
сообщение Sep 13 2008, 09:42
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



Цитата(MacGregor @ Sep 13 2008, 12:34) *
Взял HEX.
Дизассемблировал его с помощью AVR Studio.
А потом опять откомпилировал.

В результате получил HEX отличный от исходного.

Анализ показал, что студия в командах lds и sts младший байт адрес обнуляла. Хотя в исходном HEX-е эти байты отличны от нуля.

Короче, пришлось ручками править анализируя разницу в исходном и полученном HEX-ах sad.gif

Ты проведи еще один показательный эксперимент. Возьми англо-русский и русско-английский переводчики. Попробуй перевести фразу с русского на английский и потом обратно!!! Вот это как раз достойная тема будет для обсуждения!!!
Go to the top of the page
 
+Quote Post
MacGregor
сообщение Sep 13 2008, 09:52
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 9-09-08
Пользователь №: 40 090



Цитата(Flasher @ Sep 13 2008, 13:42) *
Ты проведи еще один показательный эксперимент. Возьми англо-русский и русско-английский переводчики. Попробуй перевести фразу с русского на английский и потом обратно!!! Вот это как раз достойная тема будет для обсуждения!!!

Да.. Если бы это был форум переводчиков. Но так как это форум разработчиков электроники я посчитал нужным предупредить коллег об опасности
Go to the top of the page
 
+Quote Post
Flasher
сообщение Sep 13 2008, 10:23
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



выкладывай пример, можно маленький. дабы народ проверил и перепроверил.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 13 2008, 10:39
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Flasher @ Sep 13 2008, 13:42) *
Попробуй перевести фразу с русского на английский и потом обратно!!!

Нет уж звиняйте!
ассемблер-дизассемблер - это даже не компилер-декомпилер, там всё однозначно должно быть. Ибо ассемблер - это тот же машинный код, только записанный мнемониками.

Насчёт языков - справедливо, если бы речь шла о переводе с СИ (к примеру) на пасколь или фортран


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MacGregor
сообщение Sep 13 2008, 11:47
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 9-09-08
Пользователь №: 40 090



Цитата(Flasher @ Sep 13 2008, 14:23) *
выкладывай пример, можно маленький. дабы народ проверил и перепроверил.

Пжалуста smile.gif

Пароль на rar-архив: electronix

Сообщение отредактировал MacGregor - Sep 13 2008, 11:49
Прикрепленные файлы
Прикрепленный файл  __________________20080913154425.rar ( 33.69 килобайт ) Кол-во скачиваний: 31
 
Go to the top of the page
 
+Quote Post
VDG
сообщение Sep 13 2008, 11:49
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Цитата(MacGregor @ Sep 13 2008, 13:52) *
я посчитал нужным предупредить коллег об опасности

галактико опасносте smile.gif
Go to the top of the page
 
+Quote Post
Nick_Shl
сообщение Sep 13 2008, 11:54
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 17-04-08
Пользователь №: 36 850



Цитата(MrYuran @ Sep 13 2008, 13:39) *
ассемблер-дизассемблер - это даже не компилер-декомпилер, там всё однозначно должно быть. Ибо ассемблер - это тот же машинный код, только записанный мнемониками.
Ага, щаз!
Это справедливо только если все команды обладают одной длинной и расположены всегда по адресам кратным этой длинне. В противном случае надо дизассемблировать программу проходясь по всем переходам. А теперь представте такую вещь: вставляем переход на середину двух-трех-и т.д. байтную команду, но который никогда не выполняется. Откуда дизассемблер будет про это знать? Такая лажа дизассемблируется...
А ещё круче самомодифицирующийся код. Но это, правда, не для AVR.
Go to the top of the page
 
+Quote Post
MacGregor
сообщение Sep 13 2008, 12:02
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 9-09-08
Пользователь №: 40 090



Цитата(Nick_Shl @ Sep 13 2008, 15:54) *
Ага, щаз!
Это справедливо только если все команды обладают одной длинной и расположены всегда по адресам кратным этой длинне. В противном случае надо дизассемблировать программу проходясь по всем переходам. А теперь представте такую вещь: вставляем переход на середину двух-трех-и т.д. байтную команду, но который никогда не выполняется. Откуда дизассемблер будет про это знать? Такая лажа дизассемблируется...

Да я в курсе про это.. Но в том-то всё и дело, что он дизассмит команды правильно, а адреса в них почему-то вычисляет не верно
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Sep 13 2008, 12:14
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Проблема с дизассемблером есть еще такая: при отладке выше 64k дизассемблированный код размещаяется с нулевого адреса - теряется старший бит адреса. Хотя на работу программы это не влияет, но отлаживать жутко неудобно.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 13 2008, 14:57
Сообщение #11


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Nick_Shl @ Sep 13 2008, 15:54) *
Ага, щаз!
А теперь представте такую вещь: вставляем переход на середину двух-трех-и т.д. байтную команду, но который никогда не выполняется. Откуда дизассемблер будет про это знать?

Ето штатный прием нае обмануть дизасм. biggrin.gif А вменяемый дизасм должен, напоромшись на таблицу переходов или ret посреди процесса, сдаться и оставить куски non-resolved кода в .db/.dw В том числе отгрести неправильные команды на границах пройденных участков кода.
Go to the top of the page
 
+Quote Post
MacGregor
сообщение Sep 13 2008, 15:18
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 9-09-08
Пользователь №: 40 090



Цитата(_Pasha @ Sep 13 2008, 18:57) *
Ето штатный прием нае обмануть дизасм. biggrin.gif А вменяемый дизасм должен, напоромшись на таблицу переходов или ret посреди процесса, сдаться и оставить куски non-resolved кода в .db/.dw В том числе отгрести неправильные команды на границах пройденных участков кода.

Грубо говоря, "правильный" дизасм должен дизасмить не последовательно идя от ячейки к ячейке, а следуя за командами перехода начиная от точки входа в программу после сброса. Т.е. фактически дизасм должен выполнять программу попутно заполняя в результате этого выполнения некую структуру данных, называемую "восстановленный исходник". Хотя дизасм можно легко обмануть если переход совершается командой ijmp. Дизазм не сможет определить куда конкретно было передано управление

Ну это мы отвлеклись и в дебри полезли.. А я же говорю о том, что Атмеловский дизассемлер допускает ошибки в простейшей вешчи. А именно. Не может правильно посчитать (или правильно записать?) адрес в 4-х байтовых командах LDS и STS. Вот апчём речь.

Сообщение отредактировал MacGregor - Sep 13 2008, 15:20
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01463 секунд с 7
ELECTRONIX ©2004-2016