#c #linux #binary #strace
#c #linux #двоичный #strace
Вопрос:
Использование strace в программе: strace выводит тот же результат извлечения в Debian и CentOS, за исключением set_thread_area. (Версия программы абсолютно одинакова на обоих Linux.)
Почему они отличаются? Есть ли какой — нибудь способ, чтобы выходные данные были одинаковыми на обоих линуксах ? Может ли это различие быть запрограммировано на C ? Отсутствует ли какой-либо пакет в Debian / CentOS?
set_thread_area({entry_number: -1 -> 6, base_addr: 0xb7fb16c0, ограничение: 1048575, seg_32bit: 1, содержимое: 0, read_exec_only: 0, limit_in_pages: 1, seg_not_present:0, useable: 1}) = 0 открыть("/dev/urandom", O_RDONLY) = 3 читать(3, "242177)", 3) = 3
set_thread_area(0xff9db33c) = 0
Редактировать
Первый: CentOS i686
Второй: Debian x64, но скомпилированный с -m32
Комментарии:
1. сравните версии strace.
2. и предоставьте более подробную информацию о двух системах, например, тип процессора..
Ответ №1:
Вы спрашиваете о причине, по которой адреса разные, или почему strace
выходные данные форматируются по-разному? Если это последнее, я подозреваю, что вы просто имеете дело с двумя разными версиями strace
, одна из которых, возможно, устарела. Однако в этом также есть что-то странное:
set_thread_area(0xff9db33c) = 0
Адрес 0xff9db33c
определенно не является допустимым адресом пользовательского пространства на i386. Возможно ли, что одной из ваших систем является x86_64? Это также объяснило бы другой формат, поскольку set_thread_area
в i386 принимает указатель на a struct ldt_desc
, в то время как в x86_64 он просто принимает фактическое значение указателя для загрузки в регистр потока.
Комментарии:
1. Я спрашиваю о формате вывода. Почему в CentOS есть urandom, а в Debian нет?
2. Хм,
urandom
не является частьюset_thread_area
. Это отдельная вещь. В какой момент трассировки это появляется? Я подозреваю, что это настройка случайной canary для защиты от разрушения стека.