【问题标题】:Inline assembly in kernel module内核模块中的内联汇编
【发布时间】:2015-08-30 12:22:46
【问题描述】:

我的内核模块代码中的内联汇编如下:

   u64 cade_seg;
   __asm__ __volatile__ ("mov %%cs %0": "=r" (code_seg));

但是,当它编译(作为内核模块)时,会抛出“注册后垃圾rax”的错误。上面的内联汇编代码有什么问题吗?

更新:通过将%%cs 替换为其他寄存器,例如%%rax,错误仍然存​​在。

【问题讨论】:

  • 如果你使用intel语法,而不是AT&T,那么cs寄存器应该是mov指令的第二个参数
  • 这不是原因...(交换后仍然是相同类型的错误)

标签: kernel inline-assembly cpu-registers


【解决方案1】:

在汇编语言中,寄存器应该用逗号分隔:

__asm__ __volatile__ ("mov %%cs, %0": "=r" (code_seg));

段选择器也是 16 位类型。

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 2012-11-20
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2021-07-16
    • 2020-01-16
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多