查看CSAPP第三章阅读笔记的源代码
←
CSAPP第三章阅读笔记
跳转到:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
一段代码code.c <pre> int accum = 0; int sum(int x, int y) { int t = x + y; accum += t; return t; } </pre> gcc -o1 -S code.c产生汇编代码(OSX Apple LLVM version 5.0 (clang-500.2.79)): <pre> .section __TEXT,__text,regular,pure_instructions .globl _sum .align 4, 0x90 _sum: ## @sum .cfi_startproc ## BB#0: pushq %rbp Ltmp2: .cfi_def_cfa_offset 16 Ltmp3: .cfi_offset %rbp, -16 movq %rsp, %rbp Ltmp4: .cfi_def_cfa_register %rbp movl %edi, -4(%rbp) movl %esi, -8(%rbp) movl -4(%rbp), %esi addl -8(%rbp), %esi movl %esi, -12(%rbp) movl -12(%rbp), %esi movl _accum(%rip), %edi addl %esi, %edi movl %edi, _accum(%rip) movl -12(%rbp), %eax popq %rbp ret .cfi_endproc .globl _accum ## @accum .zerofill __DATA,__common,_accum,4,2 .subsections_via_symbols </pre> gcc -o1 -c code.c生成目标代码文件1,使用hexdump -C 1查看二进制数据,通过otool -tV 1反汇编器查看: <pre> (__TEXT,__text) section _sum: 0000000000000000 pushq %rbp 0000000000000001 movq %rsp, %rbp 0000000000000004 movl %edi, 0xfffffffffffffffc(%rbp) 0000000000000007 movl %esi, 0xfffffffffffffff8(%rbp) 000000000000000a movl 0xfffffffffffffffc(%rbp), %esi 000000000000000d addl 0xfffffffffffffff8(%rbp), %esi 0000000000000010 movl %esi, 0xfffffffffffffff4(%rbp) 0000000000000013 movl 0xfffffffffffffff4(%rbp), %esi 0000000000000016 movl _accum(%rip), %edi 000000000000001c addl %esi, %edi 000000000000001e movl %edi, _accum(%rip) 0000000000000024 movl 0xfffffffffffffff4(%rbp), %eax 0000000000000027 popq %rbp 0000000000000028 ret </pre> 也可以通过brew install binutils安装objdump, objdump -d 1输出: <pre> </pre>
返回到
CSAPP第三章阅读笔记
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面