首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户空间中的汇编程序设计

用户空间中的汇编程序设计
EN

Stack Overflow用户
提问于 2010-01-26 00:13:57
回答 3查看 1.4K关注 0票数 3

在用户空间中有可能有这样的一段代码吗?我的意思是,在Netbsd / Linux的用户空间中读/写协处理器寄存器是可能的吗?

代码语言:javascript
复制
XYZ]# cat pmc.c 

static inline int
arm11_pmc_ctrl_read(void)
{
    unsigned int val;

    __asm volatile ("mrc p15, 0, %0, c15, c12, 0" : "=r" (val));

    return val;
}
int main(){
    unsigned int ctrl;
        ctrl = arm11_pmc_ctrl_read();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-26 00:24:53

您可能必须通过在二进制可执行文件上应用suid位来更改它的权限,它将以root用户身份运行,我知道,这听起来可能是一个安全漏洞,但不幸的是,root用户将拥有运行它的权限,而不是普通用户。

或者您可以使用mknod创建一个设备,即/dev/mydev,然后编写一个设备驱动程序,普通用户可以在其中与设备驱动程序交互,设备驱动程序反过来在内核空间中运行,并进行汇编魔术,然后将其返回到用户空间,这种方法更可取。

希望这能有所帮助,致以最好的问候,汤姆。

票数 0
EN

Stack Overflow用户

发布于 2010-01-26 00:18:08

用户空间不能访问特权指令或寄存器。查看你的汇编手册,看看你使用的指令和寄存器是否有特权。

票数 2
EN

Stack Overflow用户

发布于 2010-01-30 19:42:10

可以,您可以以用户身份读/写协处理器寄存器。例如,所有的浮点指令都是协处理器指令,用户空间的二进制代码非常愉快地调用它们,从ARM寄存器读取/写入FPU寄存器值。

指令的可用性取决于CPU模式,这种模式在用户进程中与内核执行某些操作时不同,因此可能某些指令,无论是在协处理器上还是在主处理器上,都只允许在内核模式下使用。停止CPU的指令是一个非coproc示例。

如果你在评论中说了神秘的mrc指令应该实现什么,那么就更容易判断这是否是特权指令。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2133638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档