Файл Smali поврежден после записи с помощью fputs () - PullRequest
0 голосов
/ 18 июня 2020

Цель: я хочу ввести однострочный код в 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 выводит только одну строку, которая была добавлена ​​мной.

...