#c #arm #cpu-registers #ptrace
#c #arm #регистры процессора #ptrace
Вопрос:
В последнее время я много возился с ptrace и регистрами, и мне было интересно, есть ли разница между pt_regs и user_struct_regs в том, что касается содержимого. Более конкретно, содержат ли они оба одинаковое содержимое (значения регистра), но просто имеют разные именованные элементы для его хранения.
Я заметил, что некоторые архитектуры содержат user_struct_regs, в то время как другие, такие как arm, его не имеют.
Ответ №1:
Формат и расположение регистров сильно зависят от архитектуры. Вы должны прочитать определения и комментарии в /usr/include/asm/user.h
заголовке. (Для Linux; точное местоположение может отличаться от ОС к ОС — прочитайте соответствующую документацию ptrace.)
Комментарии:
1. Спасибо, теперь я вижу разницу, посмотрев на /usr/include/asm/user.h по сравнению с /usr/include/sys/user. h в Ubuntu. Вы случайно не знаете, что означает pt в pt_regs?
2. Я думаю, это просто «помечает» поле для использования в ptrace. IIRC, когда язык C был впервые создан, все поля структуры находились в одном пространстве имен. Другими словами, вам не разрешалось иметь поле с именем ‘regs’ в двух разных структурах, поэтому вам пришлось устранять неоднозначность имен полей в определениях структуры. Если, например, вы прочитаете страницу руководства для
stat
системного вызова, вы увидите остатки этого соглашения также вstruct stat
, где каждое поле имеет префиксst_
.