Я думаю, вы можете использовать Perl, попробуйте:
perl -0777ne 'CORE::say STDOUT s/\xef\xbe\xad\xde//g' file_name
Команда замены s
дает количество сделанных замен, -0777 означает не рассматривать новую строку как специальный символ,e
-выполнить команду, say
напечатать то, что идет дальше, затем напечатать символ новой строки, n
Не до конца разобрался, но без -из документации не работает:
causes Perl to assume the following loop around your program, which makes it iterate over filename arguments somewhat like sed -n or awk: LINE: while (<>) { ... # your program goes here }
Я не проверял, но этот код предназначен для разделения на два разных файла:decr.c
и pwn.c
. Вы сохраняете все это как 40049.c
.
См.:
40049.c:214:1: error: expected identifier or ‘(’ before ‘--’ token
214 | --------------------------------------------------- pwn.c ---------------------------------------------------
| ^~
Строка 214 — это маркер, указывающий, что это начало файла pwn.c
. Эта строка недействительна C.
Также у вас есть:
40049.c:243:5: error: redefinition of ‘main’
243 | int main() {
| ^~~~
40049.c:178:5: note: previous definition of ‘main’ was here
178 | int main(void) {
| ^~~~
Два основных файла должны быть частью двух разных исполняемых файлов.