Алгоритм переделки массива
Всем привет!)
Давно меня не было на форуме, но сейчас нужна ваша помощь. У меня есть такая штука в виде(говорю сразу, это не js код) https://gist.github.com/KosBeg/4c5ff...eb87cce59fd403 и его нужно "переделать" в следующий код Код:
static struct LCM_setting_table lcm_initialization_setting[] = { 1) один большой массив должен быть разбит на много маленьких; 2) массив имеет вид {0x00, 0x05,{0x01,0x02,0x03,0x04,0x05}}, тоесть это значит {команда, размер массива данных,{элементы массива}} елементы массива могут быть нулями, и команда тоже может быть нулем 3) имеется такой не рабочий алгоритм доставания массивов на си подобном языке Код:
auto curaddr = ScreenEA(); |
Цитата:
|
и например мне не понятна что это за хрень
Цитата:
|
Цитата:
Вам надо каким-то образом распарсить некий бинарный формат. Чтоб написать алгоритм парсинга нужна спека. Либо софт который с ним работает и много примеров для реверс-инжиниринга. Тут есть только заведомо нерабочий алгоритм(зачем он нужен - если он не верен то?) и единственный набор данных. В итоге нам предлагается каким-то образом реверс-инжинирить эту кучку байт на основе гаданий на кофейной гуще. Мы конечно можем это сделать, но никаких гарантий, что на ином наборе данных всё не сломается. Поскольку здесь у нас форум по 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 ) ) ) |
Цитата:
Вы всё верно поняли Цитата:
вроде так как нужно, если что допилю :yes: Цитата:
Цитата:
то что я дал - это таблица инициализации дисплея телефона(LCM таблица) на си, я её достал путём дизассемблирования(реверс-инжиринга) стокового ядра телефона при помощи IDA, но раньше я приводил её до нормального вида руками, а сейчас когда таких надо сделать достоточно много за небольшое время - захотел автоматизировать это, но ничего не получалось, написал только тот кусочек, который не совсем так как надо работает, точнее там ошибка даже не в алгоритме а в auto curaddr = ScreenEA(); этот си подобный язык для меня не знаком, по этому писал на угад, вычитал про такую штуку, а как её использовать? :lol: решил попросить помощи) Кстати, извините что так невнятно написал... Но я примерно на такое и расчитывал по этому и написал в оффтопику) |
Часовой пояс GMT +3, время: 11:03. |