我正在做一些实验,希望能够看到系统调用期间堆栈上保存的内容(用户登陆进程的保存状态)。根据http://lxr.linux.no/#linux+v2.6.30.1/arch/x86/kernel/entry_32.S 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));
其中 value 是一个 unsigned long。
截至目前,该值不是预期的值(它显示为 ds 的用户值保存了 0)。
我是否正确访问堆栈指针的偏移量?
另一种可能性是我可以使用 GDB 等调试器来检查内核中的堆栈内容吗?我对调试没有太多广泛的使用,并且不确定如何调试内核内部的代码。任何帮助深表感谢。
无需内联组装。保存的状态entry_32.S
系统调用的压入堆栈被布置为struct pt_regs
,你可以像这样获得指向它的指针(你需要包括<asm/ptrace.h>
and/or <asm/processor.h>
直接或间接):
struct pt_regs *regs = task_pt_regs(current);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)