免费注册 查看新帖 |

Chinaunix

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

[Linux] gcc -S生成的反汇编,为什么int变量要很多个语句才完成声明? [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:16:532015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-22 13:03 |只看该作者 |倒序浏览
本帖最后由 cdsfiui 于 2016-09-22 13:07 编辑

学习AT&T汇编的时候,知道可以用.int/.long这样的方式来生成数组,或者.equ来生成一个标号。
这些都放在.data段(初始化过),或者.bss段(未初始化)里面。

不过我用gcc来编译一个非常简单的C文件,-S选项,看到得到的汇编文件
(1) 并没有用到.data段或者.bss段,而是只有一个.data段。
(2) 而且整形变量也用了好几句话才声明完成。
如下所示,我把我有疑问的地方都标记出来了:

$ cat n.c

  1. int i=23;
  2. int j;
  3. int main(){
  4.   return 0;
  5. }
复制代码

$ gcc -S n.c
$ cat n.s

  1.         .file        "n.c"
  2.         .globl        i
  3.         .data
  4.         .align 4
  5.         .type        i, @object #开始声明i。我觉得这句是多余的
  6.         .size        i, 4       #既然后面都有了.long 23定义,那就是4个字节。这句岂不是画蛇添足?
  7. i:
  8.         .long        23         #我怎么觉得有上面和这一句就够了,上面几句和i有关的语句都不用?
  9.         .comm        j,4,4      #j为什么没有被放到.bss。难道gcc生成c代码不需要.bss吗?
  10.         .text
  11.         .globl        main
  12.         .type        main, @function
  13. main:
  14. .LFB0:                     #这个标号是什么含义,看起来没有任何实际的作用
  15.         .cfi_startproc
  16.         pushq        %rbp
  17.         .cfi_def_cfa_offset 16
  18.         .cfi_offset 6, -16
  19.         movq        %rsp, %rbp
  20.         .cfi_def_cfa_register 6
  21.         movl        $0, %eax
  22.         popq        %rbp
  23.         .cfi_def_cfa 7, 8
  24.         ret
  25.         .cfi_endproc
  26. .LFE0:                     #这个标号是什么含义,看起来没有任何实际的作用
  27.         .size        main, .-main
  28.         .ident        "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609"
  29.         .section        .note.GNU-stack,"",@progbits
复制代码

问题都在代码的注释里面了,还请板上的高人解释一下哈!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2016-09-22 15:05 |只看该作者
本帖最后由 MMMIX 于 2016-09-22 15:09 编辑

回复 1# cdsfiui

1. .type, .comm 和 .long 查下 gas 手册就都有了;
2. .LFB0 和 .LFE0 处理 exception 的时候可能会用到。


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP