Сравнение строковых значений из Strace - PullRequest
0 голосов
/ 07 мая 2019

Используя strace для сравнения выходных данных двух разных двоичных файлов, я не могу определить, какие значения записаны на самом деле.

write(3, "g\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096

write(4, "g\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096

Разница между первым и вторым кажется \ 377 \ 377 в \7 \ 0, но какую кодировку они используют?Это должны быть десятичные значения, но я не знаю, как их преобразовать для сравнения.

1 Ответ

1 голос
/ 07 мая 2019

Strace write() обработчик использует функцию printstrn, которая вызывает printstr_ex функцию из util.c , которая вызывает string_quote ( также в util.c), который выполняет печать.

Функция (по умолчанию) печатает данные, используя символы ASCII, затем стандартную нотацию C для \r \n и \b и т. Д., А затем использует восьмеричные значения для других непечатаемых байт. Строка должна обрабатываться компилятором C, поэтому вы можете написать простую программу на C для их сравнения, например. strcmp("g\377\377\377", "g\377\7\0") будет работать как положено.

Если вы хотите сравнить значения, есть также эти переключатели из man strace :

Печать всех не-ASCII-строк в шестнадцатеричном формате.

-xx

Печать всех строк в шестнадцатеричном формате.

...