arm上获取寄存器的值

来源:互联网 发布:地理探测器软件 编辑:程序博客网 时间:2024/06/05 20:53

http://blog.chinaunix.net/uid-20228521-id-1971079.html



 本来说在arm上获取寄存器的值是因为需要调试一个很古怪的问题,而在自己的机器上测试的386结构的代码似乎还不如arm上对register的访问自由。大致的想了想似乎arm上得到寄存器的值很简单的样子。所以之前才说可能在arm上会比较简单。结果今天上午一试还是当头一棒,毕竟还是对arm asm不太熟悉的结果,反而是磕磕碰碰的不太顺利,不过好歹还是搞清楚了。
    其间还一度对arm的设计产生的怀疑,不过最后看来看去还是发现arm asm的功能啊什么的还是很8错的,哈哈。

    自己做一个能够有易于使用的,能够在arm linux平台上在kernel和user space都可用的监视寄存器值的手段,就出了一个不算完善的东东,有些东西也是复习复习,也还没有测试完善,在kernel中使用的话可能还有些需要修改的东西吧。暂时收录起来:



    使用的时候可以把宏放到一个头文件里面就可以直接使用了。现在还有一点不爽的就是还需要一个特定数据类型的变量作为宏的参数传入,如果传入的数据类型长度小于所位于的平台的位数,就会产生“令人迷惑的结果”。所以使用的时候依赖于不同的平台了。对于arm,传入的参数的类型最好还是:unsigned long吧。如果定义成u32或者u64等等也行,只要和reg的长度相符合就可以了。

    同样,在编译的时候加上优化的参数:-O(默认的优化级别似乎就是2,当然禁止优化就用-O0了。哈哈)。
       1.如果是为了调试用的话,加上-g可能会有更好的效果。
       2.似乎-finline-functions也是不太令人欢迎的选项。

    嗯,大概就是这些吧,如果在kernel中使用的话,可以做成一个module,或者就是一个头文件就搞定,等下一阶段如果要调试kernel module的时候有用到再说了。

    收工看书去也。

原创粉丝点击