Я провожу некоторые эксперименты и хотел бы видеть, что сохраняется в стеке во время системного вызова (сохраненное состояние пользовательского процесса). Согласно http://lxr.linux.no/#linux+v2.6.30.1/arch/x86/kernel/entry_32.S показывает, что различные значения регистров сохраняются по этим конкретным смещениям относительно указателя стека. Вот код, который я пытался использовать для проверки того, что сохраняется в стеке (это в пользовательском системном вызове, который я создал):
asm("movl 0x1C(%esp), %ecx");
asm("movl %%ecx, %0" : "=r" (value));
где значение является беззнаковым длинным.
На данный момент это значение не соответствует ожидаемому (оно показывает, что 0 сохраняется для пользовательского значения ds).
Правильно ли я обращаюсь к смещению указателя стека?
Другая возможность может заключаться в том, могу ли я использовать отладчик, такой как GDB, для проверки содержимого стека в ядре? Я не слишком активно использую отладку и не знаю, как отлаживать код внутри ядра. Любая помощь горячо приветствуется.