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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Ассемблер AVR
_Артём_
сообщение Aug 6 2012, 20:13
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ILYAUL @ Aug 6 2012, 22:30) *
Но переходы будут осуществлятся используя SRAM

Через ICALL или IJMP?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 6 2012, 20:32
Сообщение #47


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Нет . Артём , я Вам в личку отвечу подробно. Я пока не хочу раскрывать подход вот к такой возможности asm , что бы по возможности отсечь болтовню ни о чём .Просто хочу услышать тех , кто такой путь нашёл и может уже как-то использовал.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 7 2012, 06:22
Сообщение #48


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(ILYAUL @ Aug 7 2012, 00:32) *
...может уже как-то использовал.


для подгрузки "оверлейников". правда я юзаю нижнии адреса флэша а не озу. Но через озу так же возможно.
так же можно заюзать при организации быстрых переходов по таблице - свитч и иже...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 7 2012, 06:25
Сообщение #49


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(kolobok0 @ Aug 7 2012, 10:22) *
для подгрузки "оверлейников". правда я юзаю нижнии адреса флэша а не озу.
Конечно, код ведь из ОЗУ не может исполняться у АВР.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 7 2012, 07:07
Сообщение #50


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(demiurg_spb @ Aug 7 2012, 10:25) *
...не может исполняться у АВР.


ля тех кто читает между строк - краткое содержание преддущих топиков:

идёт речь об адресах, которые могут храниться как во флэше так и в озу... адреса переходов, а не код. повнимательней что ли бы...


Цитата(ILYAUL @ Aug 6 2012, 21:43) *
...в смысл дизasm не даст ниодной метки переходов, как будто программа выполняется подряд , команда за командой....


кстати по поводу данной мысли. _любой_ бинарный код - команда за командой. в данный момент времени мощные дизасэмблеры отлично орентируются в командах проца, команды которого дезасмблируют. и деление на подпрограммы - есть условности именно дизасэмблера, а не бинарного модуля как такогого. т.е. я о чём - после отработки современного дизасэмблера подпрограммы будут(чисто отмеченные дизасэмблером). а вот очерёдность и порядок вызова данных подпрограмм - вот это уже не будет следовать из кода.

и где применимо...наверное там, где прошивка передаётся в открытом виде. но в серъёзных проектах - это не серьёзно(открытая прошивка) sm.gif

Сообщение отредактировал kolobok0 - Aug 7 2012, 07:09
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 7 2012, 08:41
Сообщение #51


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
идёт речь об адресах, которые могут храниться как во флэше так и в озу... адреса переходов,

Не всем так , нет там адресов переходов ни во FLASH ни в SRAM . Вы можете использовать SRAM по прямому назначению . но это никак не повлияет на адресацию. Все адреса переходов вычисляются на стадии компиляции программы , а использование команды ret вообще для любого диза - просто ret / А вот то , что с этой точки можно уйти в любую сторону кода без последствий , я думаю что он тоже не просечёт. Отслеживать стек , я думаю дизы ещё не научились.

Собственно , особо нового ничего и нет. Многим известен такой подход
Код
ldwi Z,METKA
push ZL
push ZH
----------
MAIN:
Какой -то код
-----------
ret
Какой -то код
-----------
METKA:

Это всё в области FLASH , и метка существует в явном виде иначе компилятор ее не вычислит.

но если
Код
.dseg
METKA:
то адрес метки возьмётся по адресу SRAM
Если METKA = 0x100 , то программа удёт на адрес 0x100 , если добавить .byte 8 - то на удёт на 0x108, при этом в самой программе меток нет вообще

Код
0x107  ldi count,30
0x108  dec count
0x109 add temp,count
0x110 sts METKA, temp  ну и т.д.
этот код для примера т.е просто набор пришедших в голову команд


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 7 2012, 11:38
Сообщение #52


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(ILYAUL @ Aug 7 2012, 12:41) *
...Вы можете использовать SRAM по прямому назначению . но это никак не повлияет на адресацию. Все адреса переходов вычисляются на стадии компиляции программы...Отслеживать стек...такой подход ...Это всё в области FLASH , и метка существует в явном виде иначе компилятор ее не вычислит....адрес метки возьмётся по адресу SRAM..Если...то программа удёт на адрес 0x100 , если добавить ...то на удёт на 0x108, при этом в самой программе меток нет вообще...



уважаемый, вы мягко говоря либо не так пишите, либо не так думаете...

1) ОЗУ можно использовать как хошь, в том числе и как хранилище адресов переходов.
2) речь шла немного о других командах,а не рэт. С рэт можно делать более экстравагантные ситуации, где дизасм. сто пудово не пройдёт, даже если будет сечь все регистры и память вместе взятые.
3) Ваш подход не совсем понятен(как пример). Потому, что он путает исходники, а не бинарь как способ уйти от дизасма. Для понимания моей фразы прошу объяснить мне Вашу цитату "метка существует в явном виде". Она существует где??? подумайте хорошенько прежде чем ответить.
4) адресс - это некое число. его можно получить как хотите - хоть сдвигом влево, хоть подсчётом в столбик. способ инициализации адреса в исходниках - феолетово как. главное чтоб при просмотре бинарника это не было понятно.

рекомендую найти на просторах инета любые исходники вирусов(для x86 должны быть). и загляните в них. вы так многое узнаете-гарантирую!!!

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

ЗЫ
Если интересует конкретика в данном вопросе - ставте задачу, находите способы решения известные вам, выкладывайте на форум. я думаю, что это будет интересно всем - научиться приёмам, которые можно заюзать при решении тех или иных проблем.

Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 7 2012, 12:42
Сообщение #53


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



1. Я не храню там адреса переходов , я использую адреса области SRAM как базовые адреса для перехода к подпрограммам
2. О каких других командах шла речь , если я вообще никакие команды до поста с кодом не приводил.
3. В явном виде , это значит что в памяти программ надо обозначить метку к которой я хочу перейти , что бы компилятор смог вычислить PC-XXXX где XXXX - адрес метки. В любом случае дизас ее покажет. Через SRAM метка не нужна.
4. Да это один из способов адресации к коду в программной памяти.

А вопрос был поставлен так
Цитата
Но вот , что это даёт практически и как это можно использовать не придумаю никак? Т.е. где бы такой выкрутас можно применить?

Хорошо , напишу вирус biggrin.gif


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 7 2012, 13:43
Сообщение #54


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(ILYAUL @ Aug 7 2012, 16:42) *
...2. О каких других командах шла речь...3. В явном виде , это значит что в памяти программ надо обозначить метку к которой я хочу перейти , что бы компилятор смог вычислить PC-XXXX где XXXX - адрес метки. В любом случае дизас ее покажет. Через SRAM метка не нужна....


2 - простите это я погорячился. действительно icall & ijmp не вы произнесли.
3 - а теперь давайте подумаем как дизазм находит эту метку sm.gif найдя явную команду перехода(условного, безусловного, относительного или явного) дизассэмблер рисует метку "XRU_101:" и в ссылках вносит эту метку типа "rjmp XRU_101" в дизассэмблерном коде. т.е. если явно нигде дизасэмблер не найдёт ссылку на данный код - то и метки не будет. т.е. достаточно не создавать таких ссылок. теперь возвращаемся к исходному коду. нахрена себе делать гимор в виде не существующих меток??? вполне достаточно будет имея некий базовый адрес и оффсет до нужного куска кода, чтоб сложить их и получить нужный адресс. это как один из способов получения адреса. (извращатся можно бесконечно кстати) в AVR оффсет команд выравнен на слово. в 86 архитектуре можно было ещё и с этим играться.

ик...
ЗЫ
и это ещё без затрагивания приимуществ AVRов, самопрограммирования, аппаратуры и прочих плюшек в конкретных камнях...

ЗЫ ЗЫ
И всё же, ышо раз обращаю ваше внимание на то, что указание метки в исходниках не есть причина нахождения метки в дизассэмблере!!! причина в команде ПЕРЕХОДА по данному адресу. А метки сами по себе прятать - то только исходники путать. Отсюда я и спрашивал - задача у вас какая изначально то???

Цитата(ILYAUL @ Aug 7 2012, 16:42) *
...А вопрос был поставлен так ...


на вопрос я уже отвечал. там где нужно динамически вычислять адресс перехода. например в "оверлейных" кусках программы. либо всевозможные таблицы переходов - типа аля switch. "конечный автомат" если хотите.

Сообщение отредактировал kolobok0 - Aug 7 2012, 13:44
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 7 2012, 15:34
Сообщение #55


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Спасибо , за пояснения.
Цитата
Отсюда я и спрашивал - задача у вас какая изначально то???

Если по данному обсуждению то никакой . Я писал программу с ветлениями через ret и допустил ошибку с меткой , забыл вписать метку , да и обозвал ее так же как в .dseg и программа "запрыгала" не туда куда я ожидал.
Естественно прояснил почему , ну и дальше Вы уже знаете.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

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

 


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


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