如何打印Linux内核中的寄存器?

发布于 2024-12-07 06:32:41 字数 280 浏览 1 评论 0原文

我想从 ARM 上运行的 Linux 内核代码中打印出几个寄存器的值。特别是我在 Linux 中有以下程序集 -

e3c52007        bic     r2, r5, #7      ; 0x7
e1520003        cmp     r2, r3
0a000003        beq     c011fa60 <smem_find+0x40>

如何在 kmsg 中打印出 r2、r3 和 r5 的值?我不想使用变量名,而是想从寄存器中获取值。

I want to print out values of a couple of registers from the linux kernel code running on ARM. Particularly I have the following assembly in linux -

e3c52007        bic     r2, r5, #7      ; 0x7
e1520003        cmp     r2, r3
0a000003        beq     c011fa60 <smem_find+0x40>

How do I print out the values of r2, r3 and r5 in kmsg? I do not want to use the variable names and want to get the values from registers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我不太熟悉内核开发和简单的调试方法,但我想这可以完成工作。

size_t r2, r3, r5;

asm ("str r2, %[r2]\n"
     "str r3, %[r3]\n"
     "str r5, %[r5]\n"
 : [r2]"=m" (r2), [r3]"=m" (r3), [r5]"=m" (r5));
 printk("r2=%u r3=%u r4=%u\n", r2, r3, r5);

编辑:现在使用 ARM 汇编而不是 x86 :p

I'm not that familiar with kernel development and easy ways to debug, but this would do the job I guess.

size_t r2, r3, r5;

asm ("str r2, %[r2]\n"
     "str r3, %[r3]\n"
     "str r5, %[r5]\n"
 : [r2]"=m" (r2), [r3]"=m" (r3), [r5]"=m" (r5));
 printk("r2=%u r3=%u r4=%u\n", r2, r3, r5);

Edit: Now with ARM assembly instead of x86 :p

香草可樂 2024-12-14 06:32:41

您可以调用show_regs(struct pt_regs * regs)。该函数将显示 pt_regs 结构上的所有寄存器。

You can call show_regs(struct pt_regs * regs). This function will diplay all the registrs on the pt_regs structure.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文