Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.11.2016, 13:47
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Алгоритм переделки массива
Всем привет!)
Давно меня не было на форуме, но сейчас нужна ваша помощь.
У меня есть такая штука в виде(говорю сразу, это не js код)
https://gist.github.com/KosBeg/4c5ff...eb87cce59fd403
и его нужно "переделать" в следующий код
Код:
static struct LCM_setting_table lcm_initialization_setting[] = {
    { 0x0, 0x01, {0x00}},
    { 0xff, 0x03, {0x80, 0x09, 0x01}},
    { 0x0, 0x01, {0x80}},
    { 0xff, 0x02, {0x80, 0x09}},
    { 0x0, 0x01, {0x80}},
    { 0xf5, 0x0c, {0x01, 0x18, 0x02, 0x18, 0x10, 0x18, 0x02, 0x18, 0x0e, 0x18, 0x0f, 0x20}},
    { 0x0, 0x01, {0x90}},
    { 0xf5, 0x0a, {0x02, 0x18, 0x08, 0x18, 0x06, 0x18, 0x0d, 0x18, 0x0b, 0x18}},
    { 0x0, 0x01, {0xa0}},
    { 0xf5, 0x0a, {0x10, 0x18, 0x01, 0x18, 0x14, 0x18, 0x14, 0x18, 0x00, 0x00}},
    { 0x0, 0x01, {0xb0}},
    { 0xf5, 0x0c, {0x14, 0x18, 0x12, 0x18, 0x13, 0x18, 0x11, 0x18, 0x13, 0x18, 0x00, 0x00}},
    { 0x0, 0x01, {0xb4}},
    { 0xc0, 0x01, {0x50}},
    { 0x0, 0x01, {0x80}},
    { 0xc5, 0x01, {0xa3}},
    { 0x0, 0x01, {0x90}},
    { 0xc5, 0x02, {0xd6, 0x76}},
    { 0x0, 0x01, {0x00}},
    { 0xd8, 0x02, {0xaf, 0xaf}},
    { 0x0, 0x01, {0x00}},
    { 0xd9, 0x01, {0x72}},
    { 0x0, 0x01, {0x81}},
    { 0xc1, 0x01, {0x66}},
    { 0x0, 0x01, {0xa1}},
    { 0xc1, 0x01, {0x08}},
    { 0x0, 0x01, {0xa3}},
    { 0xc0, 0x01, {0x1b}},
    { 0x0, 0x01, {0x81}},
    { 0xc4, 0x01, {0x83}},
    { 0x0, 0x01, {0x92}},
    { 0xc5, 0x01, {0x01}},
    { 0x0, 0x01, {0xb1}},
    { 0xc5, 0x01, {0xa9}},
    { 0x0, 0x01, {0x90}},
    { 0xc0, 0x06, {0x00, 0x44, 0x00, 0x00, 0x00, 0x03}},
    { 0x0, 0x01, {0xa6}},
    { 0xc1, 0x03, {0x01, 0x00, 0x00}},
    { 0x0, 0x01, {0x80}},
    { 0xce, 0x06, {0x85, 0x03, 0x00, 0x84, 0x03, 0x00}},
    { 0x0, 0x01, {0x90}},
    { 0xce, 0x06, {0x33, 0x26, 0x00, 0x33, 0x27, 0x00}},
    { 0x0, 0x01, {0xa0}},
    { 0xce, 0x0e, {0x38, 0x03, 0x03, 0x20, 0x00, 0x00, 0x00, 0x38, 0x02, 0x03, 0x21, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0xb0}},
    { 0xce, 0x0e, {0x38, 0x01, 0x03, 0x22, 0x00, 0x00, 0x00, 0x38, 0x00, 0x03, 0x23, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0xc0}},
    { 0xce, 0x0e, {0x30, 0x00, 0x03, 0x24, 0x00, 0x00, 0x00, 0x30, 0x01, 0x03, 0x25, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0xd0}},
    { 0xce, 0x0e, {0x30, 0x02, 0x03, 0x26, 0x00, 0x00, 0x00, 0x30, 0x03, 0x03, 0x27, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0xc7}},
    { 0xcf, 0x01, {0x00}},
    { 0x0, 0x01, {0xc0}},
    { 0xcb, 0x0f, {0x00, 0x00, 0x00, 0x00, 0x54, 0x54, 0x54, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0xd0}},
    { 0xcb, 0x0f, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x54, 0x54, 0x54, 0x00, 0x54}},
    { 0x0, 0x01, {0xe0}},
    { 0xcb, 0x09, {0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0x80}},
    { 0xcc, 0x0a, {0x00, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x10, 0x0e, 0x00, 0x02}},
    { 0x0, 0x01, {0x90}},
    { 0xcc, 0x0f, {0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b}},
    { 0x0, 0x01, {0xa0}},
    { 0xcc, 0x0f, {0x09, 0x0f, 0x0d, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0xb0}},
    { 0xcc, 0x0a, {0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0x09, 0x0b, 0x00, 0x05}},
    { 0x0, 0x01, {0xc0}},
    { 0xcc, 0x0f, {0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e}},
    { 0x0, 0x01, {0xd0}},
    { 0xcc, 0x0f, {0x10, 0x0a, 0x0c, 0x00, 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
    { 0x0, 0x01, {0x00}},
    { 0xe1, 0x10, {0x02, 0x10, 0x16, 0x0f, 0x08, 0x10, 0x0a, 0x0a, 0x05, 0x08, 0x0d, 0x06, 0x0e, 0x0d, 0x07, 0x00}},
    { 0x0, 0x01, {0x00}},
    { 0xe2, 0x10, {0x02, 0x10, 0x16, 0x0f, 0x08, 0x11, 0x0a, 0x0a, 0x05, 0x08, 0x0c, 0x07, 0x0f, 0x0d, 0x07, 0x00}},
    { 0x0, 0x01, {0x00}},
    { 0x26, 0x01, {0x00}},
    { 0x11, 0x00, {},},
    { REGFLAG_DELAY, 200, {}},
    { 0x29, 0x00, {},},
    { 0x2c, 0x00, {},},
    { 0xaa, 0x00, {},},
}
что мне известно:
1) один большой массив должен быть разбит на много маленьких;
2) массив имеет вид {0x00, 0x05,{0x01,0x02,0x03,0x04,0x05}}, тоесть это значит {команда, размер массива данных,{элементы массива}}
елементы массива могут быть нулями, и команда тоже может быть нулем
3) имеется такой не рабочий алгоритм доставания массивов на си подобном языке
Код:
auto curaddr = ScreenEA();
auto b, i, j, c, c1, cmd;
auto s;
for (i=0; i < 0x6; i++){
    b = Byte(curaddr);
    c = Byte(curaddr+1);
    if (b == 0xAB){
        Message("{ REGFLAG_DELAY, %d, {}", c);
    }else if (b == 0xAA){
        Message("{ REGFLAG_END_OF_TABLE, 0x%02x, {}", c);
    }else{  
        Message("{ 0x%x, 0x%02x, {", b, c );
        if (c==0){
                Message("},");
        }else{  
            for(j=0; j< c-1; j++){
                Message("0x%02x, ", Byte(curaddr+2+j) );
            }
            Message("0x%02x}", Byte(curaddr+3+c) );
        }
    }
    Message("},\n");
    curaddr = curaddr+0x42;
}
что можете посоветовать?
Ответить с цитированием
  #2 (permalink)  
Старый 11.11.2016, 00:44
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от KosBeg
массив имеет вид {0x00, 0x05,{0x01,0x02,0x03,0x04,0x05}}, тоесть это значит {команда, размер массива данных,{элементы массива}}
что значит команда?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 11.11.2016, 00:52
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

и например мне не понятна что это за хрень
Сообщение от KosBeg
{0x80, 0x09, 0x01}
опиши подробнее
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 11.11.2016, 02:48
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

Сообщение от KosBeg Посмотреть сообщение
что можете посоветовать?
Ничего, ибо конечная задача не ясна.

Вам надо каким-то образом распарсить некий бинарный формат. Чтоб написать алгоритм парсинга нужна спека. Либо софт который с ним работает и много примеров для реверс-инжиниринга.
Тут есть только заведомо нерабочий алгоритм(зачем он нужен - если он не верен то?) и единственный набор данных.

В итоге нам предлагается каким-то образом реверс-инжинирить эту кучку байт на основе гаданий на кофейной гуще.

Мы конечно можем это сделать, но никаких гарантий, что на ином наборе данных всё не сломается.

Поскольку здесь у нас форум по js вот вам js вариант:
var inputArray = ...;
/*
  inputArray получается путём замены фигурных скобок на квадратные:
    unsigned char ida_chars[] = { 0x00, ... , 0x00 }
      ->
    var inputArray =  [ 0x00, ... , 0x00 ]
*/

function parse(array){
  var out = [];
  for(var i = 0; i < array.length; i += 0x48 ){
    if(array[i] == 0xAB){
      out.push( ['REGFLAG_DELAY', array[i+4].toString(), []] ); 
    }else if(array[i] == 0xAA){
      out.push( ['REGFLAG_END_OF_TABLE', array[i+4], []] ); 
      break;
    }else{
      out.push( [array[i], array[i+4], array.slice(i+5, i+5 + array[i+4]) ] ); 
    }
  }
  return out;
}

function display(array){
  function toHEX(num){
    if(typeof num !== 'number') return num;
    if(num === 0) return '0x00';  
    if(num > 15) return '0x' + num.toString(16).toUpperCase();
    return '0x0' + num.toString(16).toUpperCase();
  }
  return 'static struct LCM_setting_table lcm_initialization_setting[] = {\n' + 
    array.map(
      command => {
        command[2] = '{' + command[2].map(toHEX).join(', ') + '}';
        return '    { ' + command.map(toHEX).join(', ') + '}'
      }
    ).join(',\n') + '\n}';
}


console.log(
  display(
    parse( inputArray )
  )
)
__________________
29375, 35

Последний раз редактировалось Aetae, 11.11.2016 в 02:52.
Ответить с цитированием
  #5 (permalink)  
Старый 11.11.2016, 16:59
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Сообщение от Aetae
Ничего, ибо конечная задача не ясна.
по сути это простой js массив, var arr = [ а сюда то что в фигурных кавычках здесь - https://gist.github.com/KosBeg/4c5ff...87cce59fd403];
Вы всё верно поняли
Сообщение от Aetae
Поскольку здесь у нас форум по js вот вам js вариант:
спасибо
вроде так как нужно, если что допилю
Сообщение от cyber
что значит команда?
как бы это не звучало, но сам не знаю, но нужно именно так как я сказал - {команда, размер массива данных,{элементы массива}}
Сообщение от cyber
и например мне не понятна что это за хрень
опиши подробнее
я сейчас занимаюсь разработкой ядер для андроид телефонов(по простому прошивки клепаю)
то что я дал - это таблица инициализации дисплея телефона(LCM таблица) на си, я её достал путём дизассемблирования(реверс-инжиринга) стокового ядра телефона при помощи IDA, но раньше я приводил её до нормального вида руками, а сейчас когда таких надо сделать достоточно много за небольшое время - захотел автоматизировать это, но ничего не получалось, написал только тот кусочек, который не совсем так как надо работает, точнее там ошибка даже не в алгоритме а в
auto curaddr = ScreenEA();

этот си подобный язык для меня не знаком, по этому писал на угад,
вычитал про такую штуку, а как её использовать?
решил попросить помощи)

Кстати, извините что так невнятно написал...
Но я примерно на такое и расчитывал по этому и написал в оффтопику)

Последний раз редактировалось KosBeg, 11.11.2016 в 17:38.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм для слияния элементов массива с datetime romapost Общие вопросы Javascript 29 15.07.2015 21:59
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
Ввод диапазона значений массива с клавиатуры Воскобоенко Общие вопросы Javascript 11 06.06.2015 22:34
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31
Составить алгоритм и программу для решения следующей задачи. Даны два массива X (5), rjabijj Общие вопросы Javascript 2 05.07.2012 22:02