如何确定堆栈中保存的值?

2024-03-20

我正在做一些实验,希望能够看到系统调用期间堆栈上保存的内容(用户登陆进程的保存状态)。根据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(使用前将#替换为@)

如何确定堆栈中保存的值? 的相关文章

随机推荐