Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Как Bascom хранит IP адреса в памяти процессора


Как Bascom хранит IP адреса в памяти процессора

Сообщений 1 страница 12 из 12

1

Добрый день,

возникла нетривиальная задача. Есть работающее сетевое устройство на базе UNO и ethernet шилда. Все бы хорошо, но исходники на Bascom утрачены, а возникла необходимость сменить IP адрес к которому устройство обращается. Т.к. больше менять ничего не надо, а адрес в исходнике был задан в явном цифровом виде, а не в в виде имени, казалось, что можно выгрузить данные из флеша, найти в нем старый IP адрес, поменять пару байтов и выгрузить обратно. Однако же отыскать что-то похожее на IP в выгруженном файле не получается. Искать пробовал и в символьном и в числовом виде, результат нулевой. Похоже, что компилятор каким то образом кодирует адрес при сборке. В этой связи вопрос: как его отыскать в выгруженной прошивке. Спасибо.

0

2

Если приблизительно помните что было в баскоме, создайте похожий проект и скомпильте его, меняйте адрес, смотрите что в исходнике меняется (и окружение).

0

3

Спасибо, думал об этом, но надеюсь есть способ попроще.

Отредактировано Terios (2016-04-10 18:57:09)

0

4

Terios написал(а):

Однако же отыскать что-то похожее на IP в выгруженном файле не получается. Искать пробовал и в символьном и в числовом виде, результат нулевой. Похоже, что компилятор каким то образом кодирует адрес при сборке.

Возможно, вы ищете последовательность типа 192 168 125 255
Неважно, в каком виде, DEC или HEX...
Попробуйте искать 255 125 168 192

На днях таким образом искал переменную Word в прошивке для замены значения.
Исходника под руками просто не было...

0

5

Спасибо, пробовал обратный порядок, не находит. Похоже компилятор IP адрес в Long переводит, а вот как он Long хранит - не понятно. А word удалось найти?

0

6

Terios написал(а):

Спасибо, пробовал обратный порядок, не находит. Похоже компилятор IP адрес в Long переводит, а вот как он Long хранит - не понятно. А word удалось найти?

Word нашелся.
Там была константа. Перевел в HEX, а там уже два байта найти не составило труда.
Большинство компиляторов запихивают поля переменных в конец файла и тут это "правило" сработало.
Переменные в памяти всегда хранятся цепочкой байтов, длина определяется типом.

Вряд ли IP адрес переводится в Long, каша будет...
В каком типе задаете IP адрес, тот тип и ищите.
Если числовая, то скорее всего будут четыре раздельных байта, возможно разделенных чем-то однотипным.
Если стринговая - тогда на каждую цифру будет свой байт...

Я бы написал на чем-либо стороннем утилитку и натравил ее на прошивку.
В утилите можно указать шаг поиска (через байт, через два...) и шагая, искать искомую цепочку.

0

7

Проще, наверно, если hex сюда выложить.

0

8

Если я правильно помню, то адрес в исходнике задавался не через константу, а что то вроде

Config Tcpip = Noint , _
Mac = 1.1.94.127.1.255 , _
Ip = 192.168.2.254 , _

т.е. по сути в текстовом формате. Видимо при компиляции адрес сразу упаковывается в некий внутрений формат. Писать что-то для его поиска наверно не получится, т.к. критериев поиска все равно нет, а если появятся можно в любом редакторе найти. HEX выложить готов.

0

9

Тогда ищи коды символов ASCII 192.168   ...

0

10

Terios написал(а):

Если я правильно помню, то адрес в исходнике задавался не через константу, а что то вроде
            Config Tcpip = Noint , _ Mac = 1.1.94.127.1.255 , _ Ip = 192.168.2.254 , _
            т.е. по сути в текстовом формате. Видимо при компиляции адрес сразу упаковывается в некий внутрений формат.

В данном случае вполне вероятно, что как-то упаковывается, т.к. приведенный пример - строка конфигурации.
Я говорил о присвоении переменных, типа:
a = 32768  'Word
p = "192.168.122.200"

Провел эксперимент...
Тупо присвоил четырем типам переменных значения и скомпилировал...
Просматривал полученный HEX-файл в FAR-е... ;)
Значения отыскиваются, особенно легко - строковые, они представляют собой цепочку ASCII в HEX виде.
Одно и двухбайтные - тоже возможно, но есть шанс нарваться на команду... ;)
С числовыми более двух байт гораздо сложнее, компилятор их почему-то рвет пополам, а между половинками - три байта чего-то...

Если есть возможность, то попробуйте дизассемблировать...
Это может помочь больше.
Правда, если исходник был не на Ассемблере, то получите "перевод с английского на финский с помощью румынского словаря", но гуру Ассемблера смогут выудить нужное.

Отредактировано Nord (2016-04-13 12:54:30)

0

11

Mrshilov написал(а):

Попробовал скомпилировать простой код...
Затем менял цифры в "Mac" и сравнил код...

Так потихоньку и родится полный декомпилятор "обратно в Bascom"... ;)

0

12

Mrshilov, спасибо Вам!

Наконец-то дошли руки, поискал адрес по Вашему способу. Не могу сказать что все выглядит один в один, но очень близко. Видимо все-таки есть разница между хранением MAC и IP,  или, возможно, разница в версиях компилятора. В общем, адрес хранится  младшим разрядом вперед, но не начинается с 093H. Следующие разряды точно как Вы описали. Прошивка скорректирована, данные передаются, еще раз спасибо.

0

Похожие темы


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Как Bascom хранит IP адреса в памяти процессора