免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ydfgic
打印 上一主题 下一主题

崩溃了,没看懂这个程序,高手写的 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2010-08-09 22:17 |只看该作者

论坛徽章:
0
32 [报告]
发表于 2010-08-09 22:50 |只看该作者
本帖最后由 liwangli1983 于 2010-08-09 22:53 编辑

mips平台下编译,运行出现段错误,

看了下汇编代码.果然是在a=字符串这个赋值进行前,就把a原来的值赋给了参数1对应的寄存器.再传递给printf,printf去地址1找字符串了......当然会段错误

这样证实了这确实是一个未定义行为,不同的编译器会做出不同的处理
  1.         .file        1 "sss.c"
  2.         .section .mdebug.abi32
  3.         .previous
  4.         .abicalls
  5.         .rdata
  6.         .align        2
  7. $LC0:
  8.         .ascii        "main(a){printf(a,34,a=%c%s%c,34);}\000"
  9.         .text
  10.         .align        2
  11.         .globl        main
  12.         .ent        main
  13.         .type        main, @function
  14. main:
  15.         .frame        $fp,32,$31                # vars= 0, regs= 2/0, args= 16, gp= 8
  16.         .mask        0xc0000000,-4
  17.         .fmask        0x00000000,0
  18.         .set        noreorder
  19.         .cpload        $25
  20.         .set        nomacro
  21.        
  22.         addiu        $sp,$sp,-32
  23.         sw        $31,28($sp)
  24.         sw        $fp,24($sp)
  25.         move        $fp,$sp
  26.         .cprestore        16
  27.         sw        $4,32($fp)
  28.         lw        $3,32($fp)
  29.         lw        $2,%got($LC0)($28)
  30.         nop
  31.         addiu        $2,$2,%lo($LC0)
  32.         sw        $2,32($fp)
  33.         move        $4,$3
  34.         li        $5,34                        # 0x22
  35.         lw        $6,32($fp)
  36.         li        $7,34                        # 0x22
  37.         lw        $25,%call16(printf)($28)
  38.         nop
  39.         jalr        $25
  40.         nop

  41.         lw        $28,16($fp)
  42.         move        $sp,$fp
  43.         lw        $31,28($sp)
  44.         lw        $fp,24($sp)
  45.         addiu        $sp,$sp,32
  46.         j        $31
  47.         nop

  48.         .set        macro
  49.         .set        reorder
  50.         .end        main
  51.         .ident        "GCC: (GNU) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)"
复制代码

论坛徽章:
0
33 [报告]
发表于 2010-08-10 09:39 |只看该作者
回复 32# liwangli1983


    晕,你还有mips环境!

论坛徽章:
0
34 [报告]
发表于 2010-08-10 10:01 |只看该作者
回复  liwangli1983


    晕,你还有mips环境!
zhangsuozhu 发表于 2010-08-10 09:39



    啊,一个NAS.基于2.4内核的.有人放了个debian进去.然后官方系统chroot进到debian就是了.266的处理器,32m内存.编译个hello world也得好几秒,呵呵.

不过还是挺好用的.

论坛徽章:
0
35 [报告]
发表于 2010-08-10 10:03 |只看该作者
本帖最后由 liwangli1983 于 2010-08-10 10:07 编辑

话说RISC确实爽啊,32个4字节整数寄存器......参数传递,自动变量全用寄存器搞定,基本不怎么用栈......

论坛徽章:
0
36 [报告]
发表于 2010-08-10 10:37 |只看该作者
话说RISC确实爽啊,32个4字节整数寄存器......参数传递,自动变量全用寄存器搞定,基本不怎么用栈......
liwangli1983 发表于 2010-08-10 10:03



    市场主导技术呢,还是技术主导市场呢?   个人觉的X86架构不咋地!怪异的寻址方式让人受不了!还是RISC体系简单明了

论坛徽章:
1
2017金鸡报晓
日期:2017-02-08 10:33:21
37 [报告]
发表于 2010-08-10 11:09 |只看该作者
编译不过啊,需要在什么环境下编译?

论坛徽章:
0
38 [报告]
发表于 2010-08-10 11:18 |只看该作者
编译不过啊,需要在什么环境下编译?
hzsjx 发表于 2010-08-10 11:09



    你先帖一下你的编译环境和出错代码啊

论坛徽章:
0
39 [报告]
发表于 2010-08-10 11:19 |只看该作者
市场主导技术呢,还是技术主导市场呢?   个人觉的X86架构不咋地!怪异的寻址方式让人受不了!还 ...
zhangsuozhu 发表于 2010-08-10 10:37



    wintel联盟太可怕了啊.......不过眼下有解散的趋势

论坛徽章:
1
2017金鸡报晓
日期:2017-02-08 10:33:21
40 [报告]
发表于 2010-08-10 13:34 |只看该作者
你先帖一下你的编译环境和出错代码啊
liwangli1983 发表于 2010-08-10 11:18


编译环境:
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
出错信息:
main.cc:1: error: expected constructor, destructor, or type conversion before ‘(’ token
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP