https://eqcn.ajz.miesnfu.com/wp-content/plugins/wp-3d-pony/live2dw/lib/L2Dwidget.min.js

Uboot编译步骤和分析汇编代码

编译uboot

  •   生成一系列的配置文件:make s5p_goni_config

  •   执行make

  centos下要安装依赖的文件包:yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake

 

生成过程

  start.s ---->start.o

  board.c ---->board.o

  ......c ---->xxxx.o

    

  连接器拼接

    ---->uboot(包含原始代码,调试信息,地址信息等等)

    ---->分析

    ---->arm-linux-objdump -S uboot | less

        -S 显示源代码和反汇编代码

        重定向到less查看器

 

  uboot 剥离调试信息等

    ---->uboot.bin

    ---->运行

 

编译器:把c语言代码编译成汇编语言

汇编器:把汇编语言编译成二进制文件,机器代码

 

分析uboot(objdump 之后)

_start: b reset

34800000: ea000014 b 34800058 <reset>

  1、汇编代码

  2、代码所在内存地址 机器指令 机器指令对应的汇编指令

 

ldr pc, _undefined_instruction

34800004: e59ff014 ldr pc, [pc, #20] ;

34800020 <_undefined_instruction>

  1、汇编代码 伪指令

  机器代码四个字节

    地址也四个字节 放不下指令ldr,pc这些内容

  2、汇编器做了一个处理

  利用pc指针,+20

    与其保存四字节的内容,不如利用pc,保存立即数20就可以了

  流水线(三级) 程序指令运行

  取指         ---->译码           ---->运行

  代码内存到CPU     翻译成机器能识别的二进制   运行

 

  pc指令并不是指向当前运行的这条命令 而是指向当前这条命令+8(取值,译码一共8字节)

  pc,#20 = 0x04+8 = 0x0c

       + 0x14(20) == 34800020

  [pc,#20] = 34800200 异常处理函数开始处代码

  34800020 <_undefined_instruction>:

  34800020: 34800200 .word 0x34800200

 

 

 

posted @ 2023-02-10 11:31  SLOWBY  阅读(144)  评论(0编辑  收藏  举报