反汇编 之程序入口_start

72 篇文章 1 订阅

#include <stdio.h>

int main()
{
    return 0;
}

/* 确认入口地址 */
$ readelf -h 00
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x1040
  Start of program headers:          64 (bytes into file)
  Start of section headers:          16800 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         13
  Size of section headers:           64 (bytes)
  Number of section headers:         34
  Section header string table index: 33

/* 反汇编 */
0000000000001040 <_start>:
    1040:    f3 0f 1e fa              endbr64
    1044:    31 ed                    xor    %ebp,%ebp
    1046:    49 89 d1                 mov    %rdx,%r9
    1049:    5e                       pop    %rsi
    104a:    48 89 e2                 mov    %rsp,%rdx
    104d:    48 83 e4 f0              and    $0xfffffffffffffff0,%rsp
    1051:    50                       push   %rax
    1052:    54                       push   %rsp
    1053:    4c 8d 05 56 01 00 00     lea    0x156(%rip),%r8        # 11b0 <__libc_csu_fini>
    105a:    48 8d 0d df 00 00 00     lea    0xdf(%rip),%rcx        # 1140 <__libc_csu_init>
    1061:    48 8d 3d c1 00 00 00     lea    0xc1(%rip),%rdi        # 1129 <main>

    1068:    ff 15 72 2f 00 00        callq  *0x2f72(%rip)        # 3fe0 <__libc_start_main@GLIBC_2.2.5>
    106e:    f4                       hlt    
    106f:    90                       nop

int main()
{
    1129:    f3 0f 1e fa              endbr64
    112d:    55                       push   %rbp
    112e:    48 89 e5                 mov    %rsp,%rbp

    return 0;
    1131:    b8 00 00 00 00           mov    $0x0,%eax
}
    1136:    5d                       pop    %rbp
    1137:    c3                       retq   
    1138:    0f 1f 84 00 00 00 00     nopl   0x0(%rax,%rax,1)
    113f:    00

/* __libc_csu_init */

nm aarch64-linux-gnu/libc/usr/lib/crt1.o
0000000000000000 r $d
0000000000000030 t $d
0000000000000000 r $d
0000000000000000 t $x
                 U abort
0000000000000000 D __data_start
0000000000000000 W data_start
0000000000000000 R _IO_stdin_used
        U __libc_csu_fini
        U __libc_csu_init        // U 表示没有定义的,在这里面使用了,但是在其他库中定义的符号
        U __libc_start_main
        U main
0000000000000000 T _start

编译时编译器与加入 crt1.o 和源程序一起生成可执行文件。
__libc_csu_init 在 libc 库里。

nm aarch64-linux-gnu/libc/usr/lib/libc.a | grep __libc_csu_init
0000000000000000 T __libc_csu_init        // 符号位于代码区
00000000000000c0 T __libc_csu_fini
0000000000000000 T __libc_start_main

/* _start */
程序的真正入口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值