Алгоритм переделки массива
Всем привет!)
Давно меня не было на форуме, но сейчас нужна ваша помощь. У меня есть такая штука в виде(говорю сразу, это не 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, время: 00:04. |