Professional Assembly Language中movtest4例子的一个问题。郁闷了很长时间了。

发布于 2022-09-26 12:42:48 字数 3549 浏览 12 评论 0

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 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鸩远一方 2022-10-03 12:42:48

对 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 数组里的值,所以这一句结果是正确!

吾家有女初长成 2022-10-03 12:42:48

FC5 一切正常啊~~

九八野马 2022-10-03 12:42:48

谢谢楼上两位,我会根据两位说的情况做一下验证,再次致谢!如果有什么问题,麻烦再次讨论。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文