Python – сопоставление массива байтов с различными переменными PythonPython

Программы на Python
Ответить
Anonymous
 Python – сопоставление массива байтов с различными переменными Python

Сообщение Anonymous »

Я работаю с блоком данных, сброшенным с микросхемы EEPROM. Я занимаюсь реверс-инжинирингом. Я прочитал его в Python как массив (это фрагмент примера):

Код: Выделить всё

my_array = [63, 67, 62, 127, 106, 241, 65, 219, 249, 02, 03, 05, 03, 255, 255, 01, 01, 03]
Например, я знаю, что:
  • Первые 3 байта представляют собой строку ASCII с серийным кодом устройства [63, 67, 62]
  • Следующие 4 байта представляют собой 32-битное целое число (с прямым порядком байтов!) [127, 106, 241, 65]
  • Следующее 2 байта представляют собой две 8-битные переменные [219] [249]
  • Следующие 4 байта представляют собой фиксированное десятичное число BCD [02, 03, 05, 03] (т.е. 23,53).
  • Следующие 2 байта пусты [255, 255]
  • Следующие 3 байта представляют собой 8-битные переменные с настройки однобитового флага [01, 01, 03]
Теперь... Некоторые из них я знаю, а некоторые являются догадками, что в моем случае не имеет значения, потому что я ищу всего около 3 переменных. Идея состоит в том, что я сбрасываю чип памяти, изменяю значения и загружаю его обратно.
Работать с такими перепутанными байтами раздражает. Различные типы данных, длины, порядок байтов и т. д. Мне бы хотелось, чтобы это был какой-то класс сопоставления, куда я мог бы поместить свой массив, а затем определить карту пространства памяти для переменных Python. Возможно, мне придется добавить функцию get/set для некоторых странных функций, таких как BDC с десятичной точкой, но это нормально.
Я представляю, что это выглядит так (изменение последовательного кода в первых 3 байтах):

Код: Выделить всё

my_array = [63, 67, 62, 127, 106, 241, 65, 219, 249, 02, 03, 05, 03, 255, 255, 01, 01, 03]

my_map = {### some mapping of variable names, their length, type, etc###}

data_block = mapper(my_array, my_map)
data_block.serial = 'abc'
print(data_block)

[61, 62, 63, 127, 106, 241, 65, 219, 249, 02, 03, 05, 03, 255, 255, 01, 01, 03]
Есть ли разумный способ сделать это? Может быть, библиотека/инструмент для этого?

Подробнее здесь: https://stackoverflow.com/questions/680 ... -variables
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»