c - 了解一些“帮助”gnu-as 指令
问题描述
我已经main.c
用大约两行代码编译了一个程序,以查看哪些指令gcc
/gas
添加到未优化的程序集文件中,使用:
gcc -o main.s main.c -S
我可以在gas 指令页面上查找每个指令的简明描述,但希望有人可以为其中一些指令提供更多背景信息以及它的实际用途(例如,在下游gdb
或linker
下游的任何地方)。这是完整的程序集文件,其中包含以下问题:
.file "main.c"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $4, -8(%rbp)
movl $6, -4(%rbp)
movl -8(%rbp), %edx
movl -4(%rbp), %eax
addl %edx, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
.section .note.GNU-stack,"",@progbits
.file
:基于此声明似乎已过时了此声明将来可能会消失:它仅被认为与旧as
程序兼容。. 但鉴于它仍然存在,目前在哪里或如何使用它?.ident
: 这似乎与做相同的事情gcc --version
。除了提供有关用于发出命令的“gcc”的帮助信息之外,这是否还被使用,或者它是如何使用的?.section .note...
: 我见过.section .text
,.section .bss
,.section .text
, ...但我从来没有遇到过 a.note
,并且执行 ctrl-f 搜索note
不会在此页面上提供任何内容。这条线对三个参数做了什么?和@progbits
?.size
:鉴于指令不占用空间,这给了我们第一条语句的长度main
-pushq %rbp
减去最后一条语句ret
,即main
函数的长度。但同样,这是什么用途?此外,它在as
页面上说它只允许在 .def/.endef 对内。,但这不在那些对中,对吧?.section .text.startup,"ax",@progbits
- 什么是text.startup
,ax
看起来它意味着可分配+可执行,但是什么或在哪里text.startup
?
解决方案
推荐阅读
- python - 在系统级别更改 matplotlib 默认后端
- linux - 进程间共享读写锁
- c# - Exchange 在线流订阅
- excel - 如何在导出之前将单元格值传递给字符串?
- python-3.x - GhostScript PS 到 PDF 的转换 - 裁剪了一些部分
- javascript - asp net core mvc读取芯片数据
- google-apps-script - 我正在尝试获取该行的索引,然后执行 row[0] ,这是工作表中的实际值?
- database - 在本地数据库中保存压缩的 base64 字符串是一个好习惯吗?
- python - 使 Tkinter 组合框滚动条和箭头按钮更大
- python-3.x - 基于 pandas 中特定列的聚合和索引