龙芯俱乐部开源社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3160|回复: 23

手工反汇编分析PMON

[复制链接]

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
发表于 2016-4-12 12:33:23 | 显示全部楼层 |阅读模式
本帖最后由 sigaofeng 于 2016-4-19 17:05 编辑

看本帖时,你已看了
(1,如何烧写PMON固件
http://www.openloongson.org/foru ... =146&extra=page%3D1)

龙芯1c开发板的PMON,存储在nor flash中,flash型号Winbond w25*40.4Mbit(位)总计512kb(字节).

源码http://pan.baidu.com/s/1hs0K6Ra


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-12 12:55:17 | 显示全部楼层
本帖最后由 sigaofeng 于 2016-4-12 12:58 编辑

反汇编PMON之前的准备
1 绘制反汇编书写表

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-12 13:02:34 | 显示全部楼层
本帖最后由 sigaofeng 于 2016-4-28 10:51 编辑

反汇编PMON之前的准备
2 收集1c的地址分配及外设寄存器定义

来自《Loongson_1C300_user》
http://pan.baidu.com/s/1eRGNhaa

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-12 13:06:56 | 显示全部楼层
本帖最后由 sigaofeng 于 2016-4-28 10:53 编辑

反汇编PMON之前的准备
3 龙芯指令表
龙芯一直没整理1,2,3号芯片的指令编码表,(龙芯工程师应该整理了)只能用see MIPS run一书代替
《see MIPS run中文版》的地址
http://pan.baidu.com/s/1bKsZ4E


7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-12 16:12:50 | 显示全部楼层
第一句指令反汇编

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-12 16:33:47 | 显示全部楼层
本帖最后由 sigaofeng 于 2016-4-12 16:57 编辑

第一页的反汇编
由编码表知,编码与汇编助记符一一对应.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-12 17:30:17 | 显示全部楼层
本帖最后由 sigaofeng 于 2016-4-13 10:23 编辑

bfc00000:        mtc0 $0,$12                 # 把0号通用寄存器的内容写入0号协处理器第12号寄存器,
                                                                #即状态寄存器清零;此时地址应为bfc00000
bfc00004:        mtc0 $0,$13                  #原因寄存器清零
bfc00008:        lui   $8,0x0040                 #把立即数0x0040 高位写入8号通用寄存器
bfc0000c:        mct0 $8, $12                   #把8号通用寄存器内容写入状态寄存器,即状态寄存器BEV置1
bfc00010:        lui  $29,0x8100
bfc00014:        addiu $29,$29,0xc000      #把0x8100c000写入$29通用寄存器 即sp堆栈指针
bfc00018:        lui  $28,0x8105
bfc0001c:        addiu $28,$28,0xb000      #把0x8105b000写入$28通用寄存器 即gp全局指针
bfc00020:        bgezal $0,0x0003               #if $0>=0,调用下一条指令后的第3条指令 即bfc00030:标号处
bfc00024:       nop
bfc00028:        bgezal  $0,0x01c1              #if $0>=0,调用下一条指令后的第0x01c1条指令 即bfc00730处
bfc0002c:        nop                                    #本处地址bfc0002c+0x01c1*4=bfc0002c+0x704=bfc00730
bfc00030:       lui  $1,0xa000                    #把立即数0xa000 高位写入1号通用寄存器
bfc00034:       or $31,$31,$1                    #确保$31内地址在0xa0000000-0xb0000000
bfc00038:       jr  $31                                #调用返回
bfc0003c:        nop







7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-13 13:46:37 | 显示全部楼层
经过手工反编译,会对汇编程序有深刻的认识,
当然,如果觉得麻烦可以用PMON自带的反汇编程序.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-13 13:55:28 | 显示全部楼层
本帖最后由 sigaofeng 于 2016-4-13 14:19 编辑

PMON> l  地址


在PMON提示符下输入l 命令,后面紧跟需要反汇编的地址. 例如,在龙芯1c开源开发板上,nor flash的地址是bd000000.在此存放启动代码(启动时映射到bfc00000).PMON启动后bfc00000地址却不知指向哪里,哪位大神给解释一下?

PMON> l  bd000000  即显示我们先前手工反汇编代码        退出按 q或Ctrl  c

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7

主题

56

帖子

2378

积分

金牌会员

Rank: 6Rank: 6

积分
2378
 楼主| 发表于 2016-4-13 16:04:32 | 显示全部楼层
龙芯1c的地址分配图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|龙芯俱乐部开源社区  

GMT+8, 2020-4-4 20:07 , Processed in 0.219243 second(s), 45 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表