Разница между pt_regs и user_struct_regs

#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_ .