Цель: я хочу ввести однострочный код в smali
Мой текущий подход
Я читаю файл smali с помощью getline () и запись всего содержимого в новый файл с некоторыми изменениями.
Вот код
while(getline(&line,&line_size,smaliFile) != -1) {
if (FLAG) {
if (strstr(line,"return-void") != NULL) {
fputs(" invoke-static {}, Lcom/hax/util/MainService;->start()V\n\n",smali_tmp);
fputs(" return-void\n",smali_tmp);
FLAG=0;
continue;
}
}
fputs(line,smali_tmp);
}
if (FLAG) {
fprintf(stderr,"can't find hook point !\n");
exit(1);
}
Где smaliFile - это оригинальный файл smali, а smali_tmp это новый исправленный файл smali.
И если я делаю то же самое вручную, то он перекомпилируется, как ожидалось
Вот ошибка при перекомпиляции
Smali.smali[1771,7] mismatched input '' expecting END_METHOD_DIRECTIVE
Could not smali file: com/gbwhatsapp/Smali.smali
Но когда я заглянув в поврежденный файл в расположении 1771,7 с помощью vim, нет никаких необычных вещей или символов.
Я также использовал команду diff для проверки изменений, и diff выводит только одну строку, которая была добавлена мной.