$ra寄存器中存入的是pc的值(程序运行处的地址),调用函数时,在跳转前,必须保存当前地址(pc的值),以便后来返回。jal $ra 保存后跳转,jr $ra,返回到跳转前,通过$ra保存进入上层栈地址。

jal
    直接跳转指令,并带有链接功能,指令的跳转地址在指令中,跳转发生时要把返回地址存放到R31寄存器(ra)中。
jr
    使用寄存器的跳转指令,跳转地址在寄存器中。

所以根据ra定位core位置时,可以直接在ra位置前找jal便可以找到当前正在执行的函数。

转自http://user.it.uu.se/~justin/Teaching/NewDarkSlides/lecture5.pdf

•  As in high level languages , when programming in assembly language you should split up your program into smaller functions, that you can reuse.

•  One of the key ideas with functions is that you can call them
from any where and return back to where you called the function from.

•  The MIPS processor has two instructions that enable you to call functions, jr and jal.
•  Jump and link.
                    jal  label
   Copies the address of the next instruction into the register $ra
(register 31) and then jumps to the address label.

•  jr  $register jumps to the address in $register most common use
                    jr  $ra

            .data
str: .asciiz "Hello mum!.\n"
.text
.globl main #necessary for the assembler
main: jal message
jal message
li $v0,
syscall #exit the program gracefully
message: la $a0,str
li $v0,
syscall #Magic to printhings on the screen.
jr $ra

•  There are many way of passing values to functions, but there is a convention that most programs on the MIPS follow.
•  $a0-$a3 (registers 4 to 7) arguments 1-4 of a function.

•  $v0-$v1 (registers 2 and 3) results of a function.

        li  $a0,
li $a1,
li $a3,
jal silly #Now the result of the function is is $v0.
li $v0,
syscall
silly: add $t0,$a0,$a1
sub $v0,$a3,$t0
jr $ra

ra寄存器定位core的更多相关文章

  1. iOS 苹果自带地图定位Core Location

    Core Location是iOS SDK中一个提供设备位置的框架.可以使用三种技术来获取位置:GPS.蜂窝或WiFi.在这些技术中,GPS最为精准,如果有GPS硬件,Core Location将优先 ...

  2. 【Z】段错误Segment Fault定位,即core dump文件与gdb定位

    使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行 ...

  3. Core文件作用、设置及用法

    http://blog.csdn.net/lanmolei814/article/details/45201693 ====================================== 1.C ...

  4. Linux上调试core文件(Good)

    coredump文件 什么是coredump? 通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等.可以理解为把程序工作的当前状态存储成一个文件.许多程序和操作系统出 ...

  5. GDB Core,gdb 调试大全,core文件调试

    编译: gcc -g -o hello hello.c gdb 调试: 基本 gdb 命令. 命 令 描 述 小结:常用的gdb命令 backtrace 显示程序中的当前位置和表示如何到达当前位置的栈 ...

  6. 学会用core dump调试程序错误

    最来在项目中遇到大型程序出现SIGSEGV ,一直不知道用core dump工具来调试程序,花了近一周的时间,才定位问题,老大很生气,后果很严重,呵呵,事后仔细学习了这块的知识,了解一点core du ...

  7. gdb core调试

    原文链接 http://blog.163.com/lanka83/blog/static/32637615200801793020182/http://blog.csdn.net/taina2008/ ...

  8. 【转】段错误调试神器 - Core Dump详解

    from:http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html 段错误调试神器 - Core Dump详解 来源:互联 ...

  9. Unix 用gdb分析core dump文件

    产生core文件条件 用ulimit -c 指定core文件大小来开启core文件的生成,如:ulimit -c unlimited 用gdb分析core文件的条件 可执行程序在编译时,需加入-g参数 ...

随机推荐

  1. iphone使用linux命令apt-get也没有问题

    那么教程开始: 首先安装cydia这个越了yu就有自带的哦 然后添加源,比如apt.91.我忘了,大家可以在http://frank-dev-blog.club/?post=45找一个 查找termi ...

  2. 团队项目个人进展——Day04

    一.昨天工作总结 冲刺第四天,昨天继续忙着整理数据结构与算法的知识,在项目上看了看有关视频,学习了有关视图的地方和文档说明 二.遇到的问题 无 三.今日工作规划 学习并实现地图的放大与缩小

  3. 配置 tsconfig.json

    作用 指导编译器如何生成 JS 文件 参数 target: 编译目标平台(es3, es5, es2015) module: 组织代码方式(commonjs, AMD) sourceMap:编译文件对 ...

  4. ORACLE数据库AWR工具学习

    AWR(Automatic Workload Repository)即工作负载信息库,主要用于收集数据库运行状态的资料库,通过AWR报告可以分析ORACLE数据库的性能,从而给出优化策略. 图一:此图 ...

  5. Paxos可容错的一致性协议

    一致性问题要求多个process对一个值达成一致.基于消息传递的分布式系统中,在不考虑消息篡改等拜占庭错误的情况下,Paxos可以解决在进程退出,消息延迟,丢失,重复等异常发生的环境中对某个值达成一致 ...

  6. 将 ExpressRoute 线路从经典部署模型转移到 Resource Manager 部署模型

    本文概述将 Azure ExpressRoute 线路从经典部署模型转移到 Azure Resource Manager 部署模型的效果. Azure 当前使用两种部署模型:Resource Mana ...

  7. hdfs基本操作-python接口

    安装hdfs包 pip install hdfs 查看hdfs目录 [root@hadoop hadoop]# hdfs dfs -ls -R / drwxr-xr-x - root supergro ...

  8. mongodb/python3.6/mysql的安装

    1 下载与解压 在官网下载mongodb安装包 tar -zxvf mongodb-linux-x86_64-ubuntu1604-3.4.0.tgz 2 移动安装文件 sudo mv mongodb ...

  9. Error:Could not find com.android.tools.build:gradle:3.0.0

    Error:Could not find com.android.tools.build:gradle:3.0.Searched in the following locations:    file ...

  10. JavaWeb定时器-Spring3.x及更高版本Task使用

    大背景 现代的 Web 应用程序框架在范围和复杂性方面都有所发展,应用程序的每个底层组件也必须相应地发展.作业调度是现代系统中对 Java 应用程序的一般要求,而且也是对 Java 开发人员一贯的要求 ...