免费注册 查看新帖 |

Chinaunix

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

Professional Assembly Language中movtest4例子的一个问题。郁闷了很长时间了。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-09 09:06 |只看该作者 |倒序浏览
movtest4.s的源代码如下:
.section .data
        values:
                .int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60
.section .text
.globl main
main:
        nop
        movl values, %eax
        movl $values, %edi
        movl $100, 4(%edi)
        movl $1, %edi
        movl values( , %edi, 4 ), %ebx
        movl $1, %eax
        int $0x80

在用gdb进行movtest4调试的过程中,有如下的情况
Breakpoint 1, main () at movtest4.s:10
10              nop
Current language:  auto; currently asm
(gdb) n
11              movl values, %eax
(gdb) print/d values     ----奇怪,应该是10啊
$1 = -9
(gdb) n
12              movl $values, %edi
(gdb) print/d $eax
$2 = 10
(gdb) print/x &values
$3 = 0xc80e60
(gdb) x/40xb 0xc80e60    ----显示的也是奇怪
0xc80e60 <values>:      0xf7    0xff    0xff    0xff    0x88    0x57    0xc7   0x00
0xc80e68 <values+8>:    0xfd    0xff    0xff    0xff    0xb4    0x57    0xc7   0x00
0xc80e70 <values+16>:   0xff    0xff    0xff    0xff    0x39    0x3e    0xc7   0x00
0xc80e78 <values+24>:   0xfc    0xff    0xff    0xff    0xdc    0x57    0xc7   0x00
0xc80e80 <values+32>:   0xfa    0xff    0xff    0xff    0x50    0x3e    0xc7   0x00
(gdb) n
13              movl $100, 4(%edi)
(gdb) print/x $edi
$4 = 0x8049518
(gdb) x/40xb 0x8049518    -----此处显示的反倒是values的数组了
0x8049518 <values>:     0x0a    0x00    0x00    0x00    0x0f    0x00    0x00   0x00
0x8049520 <values+8>:   0x14    0x00    0x00    0x00    0x19    0x00    0x00   0x00
0x8049528 <values+16>:  0x1e    0x00    0x00    0x00    0x23    0x00    0x00   0x00
0x8049530 <values+24>:  0x28    0x00    0x00    0x00    0x2d    0x00    0x00   0x00
0x8049538 <values+32>:  0x32    0x00    0x00    0x00    0x37    0x00    0x00   0x00

我的环境是Fedora4,但是在linux9.0下面也有同样的情况发生。并且值得说明的一点是我用gcc编译和用as,ld编译得到的情况是一样的。哪位帮忙给解释一下吧。

[ 本帖最后由 smallbarrow 于 2007-11-9 11:16 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-11-09 22:09 |只看该作者

回复 #1 smallbarrow 的帖子

对 gdb 的用法不了解

>> (gdb) print/d values     ----奇怪,应该是10啊
>> $1 = -9

print/d values 可能是一个间接引用的语法:输出 0x0000000a 处的内容
0xf7 就等于 -9

>> (gdb) x/40xb 0xc80e60    ----显示的也是奇怪
估计 [0x0000000a] 的值是 0xc80e60,所以打印 0xc80e60 的值得不到你想要的值


>> (gdb) print/x $edi
>> $4 = 0x8049518
>> (gdb) x/40xb 0x8049518    -----此处显示的反倒是values的数组了

movl $values, %edi
%edi 里就是正确的 values 数组里的值,所以这一句结果是正确!

论坛徽章:
0
3 [报告]
发表于 2007-11-10 00:33 |只看该作者
FC5 一切正常啊~~

论坛徽章:
0
4 [报告]
发表于 2007-11-12 15:32 |只看该作者
谢谢楼上两位,我会根据两位说的情况做一下验证,再次致谢!如果有什么问题,麻烦再次讨论。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP