免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5059 | 回复: 14
打印 上一主题 下一主题

64位编译器编译出的32位程序跑在64位CPU上,每个寄存器是多大 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-20 21:31 |只看该作者 |倒序浏览

很少接触这么底层的细节,今天在一个ptrace程序里需要取寄存器值的时候傻了. MIPS64的glibc头文件里没提供一个类似i586的直接有各个寄存器名字的结构体定义。用ptrace的GETREGS把寄存器值取到一个buffer里之后,不知道怎么读出指定寄存器的值了。

论坛徽章:
0
2 [报告]
发表于 2008-11-20 21:35 |只看该作者
32位0扩展

论坛徽章:
0
3 [报告]
发表于 2008-11-20 21:36 |只看该作者
还有,有没有人有MIPS64的资料,就想知道寄存器的排列顺序

论坛徽章:
0
4 [报告]
发表于 2008-11-20 21:36 |只看该作者
原帖由 prolj 于 2008-11-20 21:35 发表
32位0扩展

看不懂。。。。。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
5 [报告]
发表于 2008-11-20 21:40 |只看该作者

回复 #4 galaxywar 的帖子

低位是32位数据,高位填0?
其他的不知道。

论坛徽章:
0
6 [报告]
发表于 2008-11-20 21:41 |只看该作者
在gdb源代码里找到这样的定义
/* 0 - 31 are integer registers, 32 - 63 are fp registers.  */
#define MIPS64_FPR_BASE                 32
#define MIPS64_PC                       64
#define MIPS64_CAUSE                    65
#define MIPS64_BADVADDR                 66
#define MIPS64_MMHI                     67
#define MIPS64_MMLO                     68
#define MIPS64_FPC_CSR                  69
#define MIPS64_FPC_EIR                  70

/* Match the register numbers defined by Kernel. This is a temporary fix.  */
#define MIPS64_EF_REG0                   0
#define MIPS64_EF_REG31                 31
#define MIPS64_EF_LO                    33
#define MIPS64_EF_HI                    34
#define MIPS64_EF_CP0_EPC               37
#define MIPS64_EF_CP0_BADVADDR          35
#define MIPS64_EF_CP0_STATUS            32
#define MIPS64_EF_CP0_CAUSE             36

#define MIPS64_EF_SIZE                  304

eip应该对应MIPS64_PC , 但不知道esp, npc寄存器分别对应的哪个

论坛徽章:
0
7 [报告]
发表于 2008-11-20 21:41 |只看该作者
See MIPS Run论坛有中文版。
x64是0扩展的。当然你这个64位编译器编译出来的32位代码,不知是交叉编译还是什么。MIPS编译器手册可有什么说明?商业编译器吧?

论坛徽章:
0
8 [报告]
发表于 2008-11-20 21:49 |只看该作者
被误导了,NPC是SPARC里才有的

论坛徽章:
0
9 [报告]
发表于 2008-11-20 21:53 |只看该作者
原帖由 prolj 于 2008-11-20 21:41 发表
See MIPS Run论坛有中文版。
x64是0扩展的。当然你这个64位编译器编译出来的32位代码,不知是交叉编译还是什么。MIPS编译器手册可有什么说明?商业编译器吧?

是商用的,手册暂时手上没有。现在不为试新东西,就为解决问题,所以暂时只能头疼医头脚疼医脚了

论坛徽章:
0
10 [报告]
发表于 2008-11-20 22:15 |只看该作者
原帖由 prolj 于 2008-11-20 21:41 发表
See MIPS Run论坛有中文版。
x64是0扩展的。当然你这个64位编译器编译出来的32位代码,不知是交叉编译还是什么。MIPS编译器手册可有什么说明?商业编译器吧?



应该和交叉编译有关吧,没怎么弄过。

一般不是都有交叉编译环境的吗?妖妖教教我,给解释一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP