源码备份-程序员的自我修养4

//a.c
extern int shared;
extern void swap(int*,int *);
int main()
{
 int a=100;
 swap(&a,&shared);
 return 0;
}
//b.c
int shared=1;
void swap(int *a,int *b)
{
    *a^=*b^=*a^=*b;
}
//a.o    objdump -h a.o
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         00000027  0000000000000000  0000000000000000  00000040  2**0
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000000  0000000000000000  0000000000000000  00000067  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  0000000000000000  0000000000000000  00000067  2**0
                  ALLOC
  3 .comment      0000002e  0000000000000000  0000000000000000  00000067  2**0
                  CONTENTS, READONLY
  4 .note.GNU-stack 00000000  0000000000000000  0000000000000000  00000095  2**0
                  CONTENTS, READONLY
  5 .eh_frame     00000038  0000000000000000  0000000000000000  00000098  2**3
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
//b.o   objdump -h b.o
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         0000004a  0000000000000000  0000000000000000  00000040  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000004  0000000000000000  0000000000000000  0000008c  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  0000000000000000  0000000000000000  00000090  2**0
                  ALLOC
  3 .comment      0000002e  0000000000000000  0000000000000000  00000090  2**0
                  CONTENTS, READONLY
  4 .note.GNU-stack 00000000  0000000000000000  0000000000000000  000000be  2**0
                  CONTENTS, READONLY
  5 .eh_frame     00000038  0000000000000000  0000000000000000  000000c0  2**3
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
//ab.o       ld a.o b.o -e main -o ab     objdump -h ab
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         00000071  00000000004000e8  00000000004000e8  000000e8  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .eh_frame     00000058  0000000000400160  0000000000400160  00000160  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .data         00000004  0000000000601000  0000000000601000  00001000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  3 .comment      0000002d  0000000000000000  0000000000000000  00001004  2**0
                  CONTENTS, READONLY
//objdump -d a.o
0000000000000000 <main>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   48 83 ec 10             sub    $0x10,%rsp
   8:   c7 45 fc 64 00 00 00    movl   $0x64,-0x4(%rbp)
   f:   48 8d 45 fc             lea    -0x4(%rbp),%rax
  13:   be 00 00 00 00          mov    $0x0,%esi
  18:   48 89 c7                mov    %rax,%rdi
  1b:   e8 00 00 00 00          callq  20 <main+0x20>
  20:   b8 00 00 00 00          mov    $0x0,%eax
  25:   c9                      leaveq
  26:   c3                      retq

[wangruiqi@host-10-46-52-171 LDLearn]$ objdump -d ab
00000000004000e8 <main>:
  4000e8:       55                      push   %rbp
  4000e9:       48 89 e5                mov    %rsp,%rbp
  4000ec:       48 83 ec 10             sub    $0x10,%rsp
  4000f0:       c7 45 fc 64 00 00 00    movl   $0x64,-0x4(%rbp)
  4000f7:       48 8d 45 fc             lea    -0x4(%rbp),%rax
  4000fb:       be 00 10 60 00          mov    $0x601000,%esi
  400100:       48 89 c7                mov    %rax,%rdi
  400103:       e8 07 00 00 00          callq  40010f <swap>
  400108:       b8 00 00 00 00          mov    $0x0,%eax
  40010d:       c9                      leaveq
  40010e:       c3                      retq
000000000040010f <swap>:
  40010f:       55                      push   %rbp
  400110:       48 89 e5                mov    %rsp,%rbp
  400113:       48 89 7d f8             mov    %rdi,-0x8(%rbp)
  400117:       48 89 75 f0             mov    %rsi,-0x10(%rbp)
  40011b:       48 8b 45 f8             mov    -0x8(%rbp),%rax
  40011f:       8b 10                   mov    (%rax),%edx
  400121:       48 8b 45 f0             mov    -0x10(%rbp),%rax
  400125:       8b 08                   mov    (%rax),%ecx
  400127:       48 8b 45 f8             mov    -0x8(%rbp),%rax
  40012b:       8b 30                   mov    (%rax),%esi
  40012d:       48 8b 45 f0             mov    -0x10(%rbp),%rax
  400131:       8b 00                   mov    (%rax),%eax
  400133:       31 c6                   xor    %eax,%esi
  400135:       48 8b 45 f8             mov    -0x8(%rbp),%rax
  400139:       89 30                   mov    %esi,(%rax)
  40013b:       48 8b 45 f8             mov    -0x8(%rbp),%rax
  40013f:       8b 00                   mov    (%rax),%eax
  400141:       31 c1                   xor    %eax,%ecx
  400143:       48 8b 45 f0             mov    -0x10(%rbp),%rax
  400147:       89 08                   mov    %ecx,(%rax)
  400149:       48 8b 45 f0             mov    -0x10(%rbp),%rax
  40014d:       8b 00                   mov    (%rax),%eax
  40014f:       31 c2                   xor    %eax,%edx
  400151:       48 8b 45 f8             mov    -0x8(%rbp),%rax
  400155:       89 10                   mov    %edx,(%rax)
  400157:       5d                      pop    %rbp
  400158:       c3                      retq
//objdump -r a.o
RELOCATION RECORDS FOR [.text]:
OFFSET           TYPE              VALUE
0000000000000014 R_X86_64_32       shared
000000000000001c R_X86_64_PC32     swap-0x0000000000000004

RELOCATION RECORDS FOR [.eh_frame]:
OFFSET           TYPE              VALUE
0000000000000020 R_X86_64_PC32     .text
//readelf -s a.o
Symbol table '.symtab' contains 11 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS a.c
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    3
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT    4
     5: 0000000000000000     0 SECTION LOCAL  DEFAULT    6
     6: 0000000000000000     0 SECTION LOCAL  DEFAULT    7
     7: 0000000000000000     0 SECTION LOCAL  DEFAULT    5
     8: 0000000000000000    39 FUNC    GLOBAL DEFAULT    1 main
     9: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND shared
    10: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND swap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 安卓源码合集-csdn是一个非常有用的工具和资源网站,提供了大量的开源安卓项目源码供开发者学习和使用。 首先,这个合集汇集了来自开源社区的各种优秀的安卓项目源码。这些源码不仅涵盖了安卓开发的各个方面,如UI界面、网络通信、数据存储等,还有一些特定领域的应用,如音视频处理、图像处理、机器学习等。从这些源码中,开发者可以学习到各种技术和知识,拓宽自己的视野和开发能力。 其次,通过这个合集,开发者可以找到适合自己需求的开源项目源码。不同的项目可能有不同的功能和特点,可以根据自己的需求进行选择和使用。有些源码可能是完整的应用程序,可以直接使用或基于此进行二次开发;有些源码可能是某个功能模块的实现,可以作为学习参考或直接集成到自己的项目中。 此外,这个合集还提供了源码的下载和查看方式。开发者可以通过下载源码来进行学习和使用,也可以在线查看源码进行参考。对于一些比较复杂的项目,还提供了详细的项目文档和使用说明,方便开发者的使用和理解。 总的来说,安卓源码合集-csdn为开发者提供了一个集成了优秀开源项目源码的平台,为开发者学习和使用安卓开发技术提供了便利。无论是初学者还是有一定经验的开发者,都可以在这里找到适合自己的项目源码,提升自己的开发水平和能力。 ### 回答2: 安卓源码合集 -csdn 是一个在 CSDN 上收集和分享安卓开源项目的一个资源合集。CSDN(博客专区)是一个面向IT技术人员的专业社区平台,它提供了丰富的技术资源和社交交流的平台。 安卓源码合集 -csdn 这个资源合集汇集了众多优秀的安卓开源项目,包括应用程序源码、工具类库、框架和示例代码等。通过该合集,开发者们可以快速地找到他们感兴趣的项目,并获取源码用于学习和参考。 这个合集的优点在于它的更新频率高,可以及时收录最新的开源项目。同时,合集中的项目都经过精心筛选,保证了其质量和可靠性。此外,该合集还提供了搜索功能,开发者们可以根据关键词进行搜索,找到适合自己需求的项目。 使用安卓源码合集 -csdn,开发者们可以快速地找到自己需要的安卓开源项目,可以通过学习他人的代码,了解他们的实现思路和技术。对于新手开发者来说,这个合集也可以作为一个学习的平台,他们可以通过阅读和理解他人的代码,提高自己的编码能力。 总之,安卓源码合集 -csdn 是一个非常有用的资源合集,可以帮助开发者们快速找到优秀的安卓开源项目,提高自己的技术水平。无论是初学者还是资深开发者,都可以从中受益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值