首页 > 其他分享 >02_开发环境搭建

02_开发环境搭建

时间:2023-12-14 15:24:50浏览次数:34  
标签:02 __ 00 GLIBC start 开发 2.2 可执行程序 搭建

02_开发环境搭建

1. 为什么要交叉编译?

因为不同的平台架构,指令集都不一样

所以不同平台的程序使用的编译器也不一样

在x86平台使用ARM的编译器去编译出ARM平台可以执行的程序就叫做 交叉编译

指令:file [可执行文件],在第三块可以看到该文件的架构

main: ELF 64-bit LSB executable, x86-64 version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld.so.1, for GNU/Linux 4.15.0, BuildID[sha1]=0f28ab2fd3c9976f56d063fa7a506c8d203725e7, with debug_info, not stripped

2. 安装交叉编译链

有两种方式

  • 安装芯片厂商已经编译好的工具链

解压缩就可以

arm-linux- 缩写
arm-none-linux-gnueabi- linux表示linux平台 gnu开源组织eabi嵌入式接口
arm-none-eabi-
arm-elf-

codesourcecy 提供交叉编译器工具的公司

  • 自己动手编译交叉工具链

《The GNU Toolchain for ARM Target HOWTO》

自己编译工具链版本依赖比较麻烦!!!


安装已经编译好的工具链,解压缩之后将路径添加到环境变量中就行

工具链文件:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz

解压:sudo tar -zxvf [文件名]

进入到bin路径下,这里存放着工具集

使用方法:

  • 使用简单方法:
    • 需要添加PATH环境变量
    • arm-linux-gcc -o build 1.c
  • 使用绝对路径:写入makefile文件

环境配置

  • 64位机缺少32位的库,需要安装

32bit os 制作 32bit lib

64bit os --> no 32 bit lib
update add

unbuntu18

sudo apt-get install libc6:i386
sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1

3. 工具集介绍

3.1. readelf:读elf文件

可执行文件分两部分:一部分是执行的代码,另一部分是头信息(ELF头)给操作系统提供的

readelf -h abc:查看elf头

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:               0x1120
  Start of program headers:          64 (bytes into file)
  Start of section headers:          14992 (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:         31
  Section header string table index: 30

  • Magic: 魔术数
  • Class:类型 elf64类型
  • Data:小端
  • Version:版本1
  • OS/ABI:unix内核
  • Type
  • Entry point address:入口地址
    • 一般程序从这里开始进入,然后最终跳转到main
    • 一般黑客会修改这里的值,跳转到病毒程序

3.2. size:显示可执行程序的内存分布

size [可执行程序]

text    data     bss     dec     hex filename
   2614     648      16    3278     cce mycp

  • text:代码段
  • data:初始化变量
  • bss:未初始化变量

3.3. nm:符号列表

可以查看可执行程序的符号列表
查看有哪些全局的标签

nm [可执行程序]

0000000000004010 B __bss_start
                 U close@@GLIBC_2.2.5
0000000000004028 b completed.8061
                 w __cxa_finalize@@GLIBC_2.2.5
0000000000004000 D __data_start
0000000000004000 W data_start
0000000000001150 t deregister_tm_clones
00000000000011c0 t __do_global_dtors_aux
0000000000003d90 d __do_global_dtors_aux_fini_array_entry
0000000000004008 D __dso_handle
0000000000003d98 d _DYNAMIC
0000000000004010 D _edata
0000000000004030 B _end
                 U exit@@GLIBC_2.2.5
0000000000001468 T _fini
0000000000001200 t frame_dummy
0000000000003d88 d __frame_dummy_init_array_entry
000000000000216c r __FRAME_END__
                 U fwrite@@GLIBC_2.2.5
0000000000003f88 d _GLOBAL_OFFSET_TABLE_
                 w __gmon_start__
0000000000002024 r __GNU_EH_FRAME_HDR
0000000000001000 t _init
0000000000003d90 d __init_array_end
0000000000003d88 d __init_array_start
0000000000002000 R _IO_stdin_used
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
0000000000001460 T __libc_csu_fini
00000000000013f0 T __libc_csu_init
                 U __libc_start_main@@GLIBC_2.2.5
0000000000001209 T main
                 U open@@GLIBC_2.2.5
                 U perror@@GLIBC_2.2.5
                 U read@@GLIBC_2.2.5
0000000000001180 t register_tm_clones
0000000000001120 T _start
0000000000004020 B stderr@@GLIBC_2.2.5
0000000000004010 D __TMC_END__
                 U write@@GLIBC_2.2.5

  • T 全局函数
  • D 全局变量
  • d 静态变量 本文件
  • t 静态函数
  • U

0000000000001120 T _start 就是程序入口

3.4. strip:去掉符号表

把符号表无用的信息去掉(节省空间,特别是嵌入式设备)

strip [可执行程序]

3.5. strings:查看常量字符串

strings [可执行程序]

3.6. objdump:反汇编

objdump --help 查看命令选项

objdump -d [可执行程序] 反汇编

3.7. objcopy:将段按相应的部分拷贝出来

3.8. addr2line:把代码的地址行标出

4. 开发环境搭建

4.1. 确定目标机 主机的连接方式

  • UART异步串行通信接口(串口)
    • 速率低 实用性强
  • USB串行通信接口
    • 速度快 驱动要移植修改
  • TCP/IP网络通信接口
    • 速度快(10/100Mbps) 驱动要移植
  • Debug Jtag调试接口
    • 方便快捷 价格极高

4.2. 开发PC和开发板连接需求分析

普通 uboot kernel 传递 (通常不用串口,速度太慢,通常使用网口 TFTP (UDP))

调试 挂载 NFS (网络文件系统)

  • 网络搭建

虚拟机桥接
虚拟机双网卡(虚拟机添加网卡设备)

  • 网络问题排查

TCP/IP

应用层
传输层 port端口不对/端口防火墙没开
网络层 ping
物理接口

4.3. 环境搭建

  • 台式环境搭建
    • 路由器环境
    • 双网卡
  • 笔记本环境搭建
    • 虚拟机配置双网卡
    • 串口配置

重点说一下台式机的环境搭建

台式机和开发板接到一个路由器的lan口上
台式机里的虚拟机网卡设置为桥接,连通到路由器

标签:02,__,00,GLIBC,start,开发,2.2,可执行程序,搭建
From: https://www.cnblogs.com/staraire/p/17901234.html

相关文章

  • C++ Qt开发:ComboBox下拉组合框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ComboBox下拉组合框组件的常用方法及灵活运用。在Qt中,ComboBox(组合框)是一种常用的用户界面控件,它......
  • 02_ARM世界概要
    02_ARM世界概要1.ARM公司介绍成立于1990年11月,前身为Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内核给生产和销售半导体的合作伙伴(ARM公司本身不生产芯片)提供ARM架构的开发设计技术(软件工具,评估板,测试工具,应用软件,总线架构,外围设备单元)2.主流芯片(高性能)......
  • CaaS威胁,在2023年开始流行
    上一篇《报告:互联网上,73%流量来自网络爬虫》提到,恶意爬虫增长有两个原因:一是人工智能技术的普遍可用性,提高恶意爬虫的性能;二是黑灰产通过“犯罪即服务”提高了攻击的商业普及,让发起新攻击的速度加快,进一步增加黑灰产的数量。“犯罪即服务”(CaaS,CrimeasaService)是一种网络犯罪......
  • Solution Set 2023.12.14
    CF698FCoprimePermutation考虑\(p_i=0\)的情况下怎么做,首先排列\(p_i=i\)一定符合条件,考虑在此基础上生成其他符合要求的排列,考虑什么情况下\(p_i\)和\(p_j\)可以互换,发现其可以互换当且仅当对于所有\(x\neqi\)且\(x\neqj\),均有\(\left[\gcd\left(i,x\rig......
  • 2023 牛客多校 9 B
    给定\(1\lea<m\le10^9\),求\(1\leu\le10^{18}\)使得\(a^u\equivu\pmodm\)。做法先考虑不限制解的大小怎么做。显然有如果\(a^v\equivv\pmod{\varphi(m)}\),且\(v\ge\varphi(m)\),则\(a^{a^v}\equiva^v\pmodm\),于是取\(u=a^v+m\varphi(m)......
  • 2020CVPR_High-Resolution Image Synthesis with Latent Diffusion Models
    1.AutoEncoderAutoEncoder(自编码器)是一种无监督学习的神经网络模型,用于学习有效的数据表示。它的目标是将输入数据编码成一种潜在的、紧凑的表示形式,然后从这个表示中重构原始输入。自编码器由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器(Encoder):将输入数据映射到潜在表示空......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.14)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • 利用Docker和CLion在Mac优雅地开发和调试Linux C++程序
    利用Docker和CLion在Mac优雅地开发和调试LinuxC++程序starrymarin计算机主业,间断性健身爱好者,摩托、金融入门​关注他 27人赞同了该文章最近在做一些新的东西,所以学习了一些新的东西,也对旧知识加强了很多,所以终于有东西可以记录一下了。今天先更......
  • s32k-I.MX8 基于串口通讯xrce-dds搭建
    s32k-iMX8平台XRCE-DDS的搭建1.引言XRCE-DDS简述     XRCE-DDS是可以在资源受限的MCU运行的DDS,在MCU侧运行客户端,通过代理服务参与DDS通信。 使用范围      本文将描述整个XRCE-DDS在GEN2平台的搭建过程,包含SOC侧imx8上运行xrce-dds的anget和s32k312单片机......
  • HarmonyOS 实战小项目开发(二)
    HarmonyOS实战小项目开发(二)日常逼逼叨在上期实战项目一中,已经对于练手项目的背景,后端搭建等做了一定的简述,那么本期将结合HarmonyOS页面搭建个人性格测试的移动端。如有一些错误,希望观众老爷们批评指正......