Я пытаюсь написать скрипт, который получает шестнадцатеричные символы объектного файла, а затем перенаправляет вывод (в ascii) на определенную строку в файле.
В основном, я делаю
export FILE=myobj_file
export j=''
for b in $(objdump -d -M intel $FILE | grep "^ " | cut -f2); do j+='\x'$b; done; echo $j
Это распечатывает мне шестнадцатеричный код (шеллкод):
\xeb\x0d\x5e\x31\xc9\x67\x2a\x42\x4b\x55\x55\x55\x85\xc8\xc3\xc4\x85\xd9\xc2\xeb\xe8\xe8\xe8\xe8\xe9\xe9\xe9\xe9
и я хочу записать это в файл, содержащий:
#include <stdio.h>
#include <string.h>
int main() {
unsigned char code[] = {{PLACEHOLDER}} /*Here need to be inserted*/
printf("Length: %d\n", strlen(code));
int (*ret)() = (int(*)())code;
ret();
return 0;
}
Я попытался передать этот вывод в sed:
sed '6s/%d/$j/' file.c
но я получаю ошибку.
Мой результат должен быть:
#include <stdio.h>
#include <string.h>
int main() {
unsigned char code[] = \
"\xeb\x0d\x5e\x31\xc9\x67\x2a\x42\x4b\x55\x55\x55\x85\xc8\xc3\xc4\x85\xd9\xc2\xeb\xe8\xe8\xe8\xe8\xe9\xe9\xe9\xe9";
printf("Length: %d\n", strlen(code));
int (*ret)() = (int(*)())code;
ret();
return 0;
}
И либо я получаю ошибку с sed, либо я получаю sed, чтобы вставить HEX-код вместо ASCII, преобразовав \ x41 в 'A' вместо вставки \ x41.
Спасибо