怎不用构建工具开发Vue全家桶项目。早想写杰伦。豹哥已经深受大家介绍了2栽output文件。

Vue.js轻松实现页面后低落时,还原滚动位置

前言 从Vue.js
2.x颁发后,陆陆续续做了七八单种类,摸索出了同拟自己之状态管理模式,我拿的名Vuet。它坐规则来让状态更新,它带动的凡开发效率上之飙升,它便像草地,而你是野马,任你轻易驰骋,总的她是吗快速开发使诞生。
缘由 在巨型的Vue应用程序开发中,多组件通信…

进阶 vue
全家桶


以档方可作为一个前端 vue 进阶项目

怎样不用构建工具开发Vue全家桶项目


Vue是目前最好盛行的前端开发框架之一,与Vue-router和Vuex组成俗称的Vue全家桶,更是开前端富交互使用之利器。配合webpack等构建工具,开发大型应用也得得心应手。随着Vue的普及,可能有的老旧项目为想会“渐进式”的动Vue,或者局部种类想用Vue来做但不…

Vueg – 为 webApp 提供转场特效的开源 Vue
插件


设若您产生以 vue + vue-router 开发 web App、hybrid
App,这个插件可以为您的 app 轻松获取页面切换时的转场特效。

Vue.js 学习系列二 —— vuex 学习实践笔记(附
DEMO)


正文介绍了作者在上 vuex 过程遭到所获取之更,用简单的语言说明 vuex
的用法

Vuex2 与 Axios
开发


Vuex2 与 Axios 开发之那么点事

采取 vue2+Vuex+Router 重写饿了么点餐系统跟 vue
插件简析


流行写的 Demo,技术分享

据悉Vue实现后台系统权限决定


据此Vue这好像双向绑定框架做后台系统重新入不过,后台系统相比日常前端项目除了数量交互更频繁以外,还有一个特别之需求就是对用户的权能决定,那么什么样在一个Vue应用中实现权力决定为?下面是我之均等沾更。
当权力的社会风气里服务端提供的一切都是资源,资源可以由请求方法+请求地址…

axios
全攻略


针对 axios 官方文档进行了详尽翻译,帮助大家再也好之问询以及动 axios

根据 vue 开发之走端 H5
积分商城项目


基于 vue@1.0 开发之移位端 H5 积分商城项目
vue
vue-ruoter
vue-resource
webpack

vue2.0 transition — demo
实践填坑


vue1.0 版本和 2.0
版本的接入系统改变或老彻底底,具体求自行详看文档介绍:https://vuefe.cn/v2/guide/migration.html\#
过渡。在用 2.0 版本做通效果的时节,虽然比 1.0
版本强大很多,但是实施过程遭到还是踩了部分未应踩但是尚是踩了之坑。虽然官网文档已经很详细地介绍了各种应用场景,但是这里要经过几个小
demo 案例来感触下 vue2.0 transition 带来的有利吧!

一个 Vue.js+Node.js
的博客内容管理体系


一个后端 Node.js,数据库 mongoDB,前端 Vue.js 的博客内容管理体系。
包括了 vue-router, vue-resource, vuex 等。

Vux 2.0
发布


依据 WeUI 和 Vue(2.x) 开发的倒端 UI 组件库,主要劳务被微信页面

【vue+axios】一个类别学会前端实现登录拦截


一个类型学会 vue 全家桶 + axios 实现登录、拦截、登出效益,以及用 axios
的 http 拦截器拦截请求和应。

Vue2.0用户权限决定解决方案


Vue-Access-Control是相同仿基于Vue/Vue-Router/axios
实现之前端用户权限控制解决方案,通过对路由、视图、请求三个层面的主宰,使开发者可以实现任意颗粒度的用户权限控制。

Vue
服务端渲染业务入门实践


笔者:威威(沪江前端开发工程师)

多年来, 产品同学一样如以往笑哈哈的递来需求文档, 纵使内心万形似拒绝,
身体倒是老大平实。 接了要求,好当求不复杂, 简单构思 后控制就此 Vue,
得心应手。 切好图, 挽起袖子准备撸代码的时节, SEO
同学不知何时都站至了背后。

“听说您如就此 Vue?”
“恩…”
“SEO 考虑了也? 整个 SPA 出来,网页的 SEO 咋办?”
“奥…”

换以前, 估计只能无奈之易个落实方式, 但是 Vue 2.0 时代的来,
给您多矣同一种植可能。 你得对 SEO 工程师说: 用 Vue 没问题!

Vue2.x
踩坑和总结


总结自己以念 vue 过程中遇的问题

Vuex 实战:如何在广 Vue 应用被团队 Vuex 代码 |
掘金技术征文


笔者:滴滴公共前端团队 前言:
最早我们当统筹《Vue.js权威指南》这按照开之当儿也一直思考要无设加盟 Vuex
相关的情节,也生多同学埋怨说咱从不进入者节。
其实整体我们用的还是比早,也于 1.0 和 2.*
都踩了一部分坑,但是也未欲大家在其他复杂不复杂的场景里…

Vue.js 学习系列四——Webpack
学习实践


苟惦记模仿好 Vue 组件化开发,必先对 webpack 有尽的了解。

vue-cli#2.0
项目结构分析


接触了 vue 的同窗应该还了解,用 vue-cli 开发 vue
的类型大便宜,它可帮忙您快构建一个享有强大构建能力的 Vue.js
项目。今天勿开腔什么是 vue-cli,而是来说说用 vue-cli
构建的花色结构是怎的连分析部分文件。

AT – 前端 UI
组件库


AT-UI 是一模一样缓缓基于 Vue 2.x 的前端 UI 组码库,主要用来快速开 PC
网站产品。

vuex
探索的路


vuex 探索之路

Vue.js 学习系列三——axios
学习履


正文介绍了 Vue 推荐网络通讯库 axios 的利用

因 Toast 为例讲解 Vue
组件的定义


  1. 单文件组件 日常支出时,我们种文件夹通常还是用 vue-cli 创建的,以
    单文件组件 的不二法门来集团代码的。按照平日的支出流程,现在先行创造一个
    Toast.vue 文件。 该器件有点儿个 prop : visible 与 msg。visible
    控制显示和隐藏,msg …
[Vue 脱坑记 -
查漏补缺(汇总下群里高频询问的xxx及给出不靠谱的解决方案)](https://link.jianshu.com?t=https%3A%2F%2Fjuejin.im%2Fentry%2F5a0188166fb9a045167c9a40)

对于以上三近似人,走吧,这里不是您来装逼的地方.
你们吗无值得看大花那么基本上日错开汇总的水文.
学习一些新东西.若是有人为集中那么基本上问题(指明方向和一定的化解措施).
这种气象一般报错信息方可见见是何许人也包抛出的信息.
一般卸载这个模块,安装重新安装下即可. 官方说明如下: dat…

一个因vue2、koa2同mongodb的博客


博客终于差不多写了了,虽然还是可能发生一堆bug,
不过我急要描绘一篇博文来分享了= = 博客前台展示 博客前台展示
博客后台展示 博客后台展示博客后台编辑 项目地址
github地址:https://github.com/BUPT-HJM/vue-blog
在线访问地址: …

之所以vue优雅地编写UI组件的几乎长达指导标准


日前在品尝写几单UI组件,并经翻阅element-ui的源码,与那个频比较,然后认真想,最后总结出有些要好之组成部分经验和体会。在往轮子的进程被,既巩固了html,css,js基础,又加重了针对性vue源码的知晓,更重要之凡被了自家一个复习和推行所法了之设计模式和揣摩的机遇,来修更…

vue + vuex +
directives实现权力按钮的思绪


对此这种问题,很显著不可知每个按钮都失去判断,所以我合计了瞬间组成于定义指令和vuex完成了对应的落实。
vuex里面的showLogin这个action无非就是针对login的显示隐藏flag的操作。
这里只是完成了简要的登陆权限决定,从登陆权限出发,可以投入更多之权能决定,比如根…

VueJS
开发大问题汇总


由庄之前端开始转向
VueJS,最近起运用这个框架进行支付,遇到有的题材记录下来,以全后用。
最主要写一些 官方手册
上并未写,但是其实开发被见面逢的题目,需要肯定文化底子。
CLI: Vue-CLI UI: Element HTML: Pug(Jade) CSS: Les…

Weex
新官网


Weex Conf 以杭州做,活动着宣布了初的 Weex 官网及 Logo

内外端分离之路 – Vue2
项目多入口模板改造方案


做前后端分离也起一段时间了,需要提升一下型多入口的构建方案及
Vue@2.x。项目模板没有选择再开发,而是直接选用了 vue 官方模板
vuejs-templates/webpack。现在我们用拿此 SPA
单入口模板改化多入口,并且修改补充加有开支功能,以配合 Koa-grace
时之支出流程。

何以用 Vue
构建大型单页面应用


构建大性能,高可用的单页面应用

react都这样无情了,vue还是那么有义,4种父子组件数据双向传送大法


于定义事件可以为此来创造于定义之表单输入组件,使用 v-model
来进展多少双向绑定。看看这:input v-model=”something”
这个我们一直用v-model像表单那样绑定就一直可以展开父子组件双向绑定了。在v-model的语法糖里封装了v-on:input

Vue 2.0
服务端渲染怎么耍?


Vue 2.0
发布了为发一段时间了,新本子比较深之翻新就是支撑服务端渲染,最近空闲折腾了下
Vue 的劳动端渲染,记录下来。

Vue-router2.0
学习笔记


Vue.js
的一律充分特点就是是构建单页面应用很有益,既然要有利构建单页面应用那么当少不了路由,vue-router
就是 vue 官方提供的一个总长由于框架。总体来说,vue-router
设计得简单好用,下面就是来聊聊自己实在用到过的有些主意。

BetterScroll:可能是眼下极端好用之动端滚动插件


作者:滴滴webapp架构组-付楠 BetterScroll
是一样舒缓主要解决移动端各种滚动场景需求的开源插件(GitHub地址),适用于滚列表、选择器、轮播图、索引列表、开屏引导等采用场景。
为了满足这些状况,它不仅仅支持惯性滚动、边界回弹、滚动条淡入淡出等功效的灵活安排,让滚动…

当 better-scroll 遇见
Vue


笔者:滴滴公共前端 黄轶
在我们便的走端项目开发中,处理滚动列表是重复常表现无了之急需了。
以滴滴为条例,可以是这样竖向滚动的列表,如图所示: 竖向列表
也得以是横向滚动的导航栏,如图所示: 横向列表 可以打开“微信 —>
钱管—>滴滴出行”体验效果。 我们于贯彻就仿佛滚动效应的时…

手摸手,带您用vue撸后台
系列二(登录权限篇)


登正题,做后台项目分为做另外的品种,权限验证和安全性是生关键之,可以说凡是一个后台项目同样开始就是务须考虑与搭建之根底核心功能。我们所设水到渠成的凡:不同之权位对诺在不同的路由,同时侧边栏为急需根据不同之权杖,异步转移。这里先简单说一下,我实现登录以及权杖验证的笔触。
登录:当用户填写…

制 Vue.js
可复用组件


自从保安视图到维护数据,Vue.js
让咱快地付出使用。但随着事情代码日益庞大,组件为愈多,组件逻辑耦合严重,使代码维护更换得十分困难。

同时,Vue.js
的接口和语法十分擅自,实现均等功能来多栽方法。每个人解决问题之思绪不同等,写出来的代码也尽管无平等,缺乏组织内之科班。

本文旨在从组件开发之差点列举出合理的解决智,作为树立组件规范之一个参照。

Vue2
后台管理体系缓解方案


据悉 Vue.js 2.x 系列 + Element UI
的后台管理网解决方案。该方案作为同拟多力量的后台框架模板,适用于多方底后台管理网(Web
Management System)开发。

Vue2
全家桶与微信支付


采用 Vue 全家桶开发微信项目踩坑全经过及经验总结

vue-lazy-render


Vue 组件, 用于 Vue 组件的推移渲染,
改善正进入页面或者数据量较充分的页面操作时起卡顿的场面。

打一个改写后的 vue 小应用认识
vuex


源代码是 vuex1.0 写的,学习一段时间 vue 后因故 vuex2.0
重新描绘了一致通,让大家可对比一下 vuex1.0 和 vuex2.0
的有的写法上之差距。

Vuex
通俗版教程


正文基本上是合法教程的盗版,用通俗易懂的字讲解Vuex,也对原文内容产生剔。
如果你针对以上声明非在意,那么就是可以连续羁押本文,希望对你所有助。
学习一个初技巧,必须要明了两独W,”What && Why”。 “XX
是啊?”,”为什么要使 XX ,或者说 XX 有什么利益…

Vuex
实战


极致早我们以统筹《Vue.js 权威指南》这按照开的当儿也一直考虑要无设参加 Vuex
相关的情,也时有发生很多同桌抱怨说咱们从不进入者节。

深入
NUXT,看看同样久命令行的冷到底发生了哟


乘势 react 社区的 next.js 框架的揭晓,vue
社区也总算落地了属于自己的上下端同构框架
nuxt.js。在越的触及和下中,发现 nuxt.js 确实大地便民了 vue
项目之开发,其幕后的逻辑吗值得咱们欣赏。本文主要研究 nuxt
的运作规律,分析她从接受一漫长 nuxt
指令,到成功指令背后所发生的如出一辙文山会海作业。

Vue 2.0
构建单页应用最佳实战


前言 我们以见面挑选采取有vue周边的库vue-cli,
vue-router,vue-resource,vuex
1.运用vue-cli创建项目2.运用vue-router实现单页路由3.就此vuex管理我们的数据流4.运vue-resource请求我们的node服务端5.如…

Vue 大型 SPA
项目的超级实践


即时片年前端发展迅猛,日新月异,各种框架层出不穷,这是一个那个时,也是一个极致好之秋,有幸的凡能够在在这个时代去亲眼见证它、实践它。

vue中慎用style的scoped属性


谨慎运用无是绝不,而是持同样种审美的秋波去看待她。scoped肯定是解决了体制私有化的题材,但同时为引入了新的问题—样式不易(可)修改,而过多时节,我们是得针对集体组件的样式做微调的。所以自己才说如果小心谨慎用
首先使说明的题材是,最开头自己觉得马上是一个BUG或者说一个弊端(因为就…

VueX
填坑指南


Vuex 是一个占为 Vue.js
应用程序开发之状态管理模式。它使集中式存储管理应用的备组件的状态,并盖相应的规则保证状态为相同种植而预测的计发生变化。

Vue.js 学习系列一样 —— vue-router2 学习履笔记(附
DEMO)


记录了笔者以求学 vue-router 过程遭到之涉,并顺便学习 demo。

Vuex
通俗版教程


通俗易懂的 Vuex 简明教程

Vue-Blu 发布啦!基于 Vue2.x 和 Bulma 的 UI
组件库


Vue-Blu 是同等磨蹭基于 Vue2.x 和 Bulma 的 UI 组件库。目前就起近 30 只零部件,
基本覆盖周边的光景。后续也会见不断完善和长。特点是冲 Bulma css
框架,本身有着了充分好的布局与样式的底蕴、支持定制化、 API
友好、灵活。是前者快速支付之利器!

Vue
核心的数劫持


立马篇稿子讲解的凡 Vue 框架中经过 Object.defineProperty()
这个办法实现数据劫持的打算

一个商品 SKU 是怎么变的(vue
实现)


一个货 SKU 是怎么转移的

Vue.js
富文本编辑器


A wysiwyg editor written in Vue.js and Vuex.js, only support Vue.js
2.x.x

公众号:  读思有礼


丁的一生一世,有一个偶像大好之,杰伦成为自己的偶像,我认为是自身总体青春岁月里,一桩最要命的乐事。
      ——for.everH

  大家吓,我是豹哥,猎豹的金钱豹,犀利哥的哥哥。今天豹哥吃大家讲的是嵌入式开发里的executable文件(elf)

   
写了如此老,早想写杰伦,却迟迟未敢动笔,只为他是本人青春记忆里极其美好的存,我弗思量写烂。

  第四、五节课里,豹哥已经让大家介绍了2栽output文件,本文继续为大家称project生成的另外一样种植output文件-executable文件,也是特地重大的output文件。

     
 昨天,我打开微博,杰伦取消两集市上海体育馆演唱会让程足协上了热搜,这天为是杰伦专栏《11月之萧邦》发行12周年纪念,心底最初的怀念又同样不良被撼动,我思念,是时刻写了。

  文件涉及:linker文件

     
与杰伦结缘是于04年的夏日,那年,整个校园的空气里,似乎都是夏天底含意,至今自己按照能清晰地回顾起就之感觉。在同样破及一个冤家偶然聊天吃,我掌握了一个被周杰伦的歌手发行了新专辑,那时正学会上网,对全充满惊异,在网及平等搜,带及耳机试听了Mv,从此一发不可收拾,当时随即首mv正是因杰伦新专辑命名的《七里热》,有人说就首歌唱顶多是流行曲,但为自我而言,它起相同种植奇特之义,那是自家整个15年的年轻记忆,纯真,躁动与不安都深藏于里边。

  • project文件 +
    relocatable文件 ->
    executable文件

   
爱屋及乌,很快我就了解及以杰伦批发这张专辑之前,《JAY》《八度空间》《范特西》《叶惠美》都是经典,当年或磁带的时期,其中《米兰不怎么铁匠》《梯田》《半岛铁盒》永远是自个儿复读机里无限循环的曲目,从翁爷爷外婆战争环保到功,天马行空的作词,创意形成的曲风,融合在海岛式、中东式、死嗓、美声唱法、京剧唱法、rap、b-box等强唱风,突破了语言、唱法的类限制,激发出异常之乐层次,每一样破去听,对自身之耳根来说,都生同样种植新的不过有震撼的效力,杰伦的歌唱融入中西方多种因素,却并未觉矫揉、花哨,小小的本人并无明了音乐,竟为会见成千上万不善惊讶于江湖能发生这般怪异的音乐,这该是怎么的御才!当时本着杰伦的钦佩都不可知就此疯狂形容,我竟觉得是能够跟杰伦搭边的,喜欢杰伦的丁都是及时大千世界最美好的食指,我必会与外出且不结的共同话题,灵魂相通,就如此,我之初恋也经过开端。

  仔细看过豹哥之前课程的爱人一定晓得,豹哥在第四节课relocatable文件里介绍的object文件于格式上其实和本文要说话的elf文件是近乎之,它们都属于ELF文件分支。只不是relocatable文件才是中过渡文件,而本文要讲的elf却是规范的output文件,这个文件几乎涵盖了工的有消息,有了是文件我们既是好在线调试工程,也足以拿elf文件转换成为image文件,直接下载image文件数据上芯片中脱机运行。今天豹哥就是为大家细心分析elf文件。

     
很倒霉,大学那年冬,我人生被率先不好恋爱受挫了,恰遇杰伦第6摆放专辑《11月肖邦》推出,主打歌《夜曲》,《头文字D》主题曲《一路为北》是她伴随自己度过最难以禁的光景,每每听着它们,撕心裂肺地哭了后,我想,至少,我还有杰伦的曲。

平、elf文件基础

  ELF全称Executable and Linkable
Format,可尽连接格式,ELF格式的文书最早用于存储Linux程序,后演变到ARM系统及存储ARM程序。ELF文件(目标文件)格式主要三种植:

  • 可重定向文件:用来和任何的目标文件并来创造一个可执行文件或者共享目标文件(也如object文件或者静态库文件,通常后缀为.o和.a的公文)。这个文件是用来编译和链接阶段。
  • 可执行文件:用于转移应用image,载入存储器执行(后缀通常也.out或者.elf)。这个文件是用于加载执行等级。
  • 共享目标文件:用于和另共享目标文件或者object文件共转可执行文件,或者跟可执行文件一起创办以image。(也称一起享库文件,后缀为.so的公文)。这个文件既而用以编译和链接阶段,也可是用于加载执行等级。

  我们以ARM开发中另行多点的凡前少种植格式,第一种格式前面系列文章relocatable文件早已介绍了,本文的栋梁是次种格式-可执行文件。不管是啦种格式的ELF文件,其还或带有如下三种基本索引表:

  • file header:一般在文件之开端,描述了ELF文件的完全组织情况。
  • program
    header
    :告诉系统如何创建image,可执行文件必须备program
    header,而可重定向文件则不欲。
  • section
    header
    :包含了叙文件section的信,每个section都发一个header,每一个header给出诸如section名称、section大小相等信息。可重定向文件要带有section
    header。

  既然知道了存在三种索引表,那么表底布局定义在乌也?github上的linux仓库里发生实际定义,在elf.h头文件里。

Linux仓库:https://github.com/torvalds/linux.git
elf.h路径:\linux\include\uapi\linux\elf.h

  打开elf.h文件就可找到三单说明的原型定义,鉴于目前底ARM
Cortex-M都是32bit,所以这边就排有32bit产的阐发底原型:Elf32_Ehdr、Elf32_Phdr、Elf32_Shdr。

// file header
#define EI_NIDENT    16
typedef struct elf32_hdr{
  unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
  Elf32_Half    e_type;                 /* Object file type */  
  Elf32_Half    e_machine;              /* Architecture */  
  Elf32_Word    e_version;              /* Object file version */  
  Elf32_Addr    e_entry;                /* Entry point virtual address */  
  Elf32_Off     e_phoff;                /* Program header table file offset */  
  Elf32_Off     e_shoff;                /* Section header table file offset */  
  Elf32_Word    e_flags;                /* Processor-specific flags */  
  Elf32_Half    e_ehsize;               /* ELF header size in bytes */  
  Elf32_Half    e_phentsize;            /* Program header table entry size */  
  Elf32_Half    e_phnum;                /* Program header table entry count */  
  Elf32_Half    e_shentsize;            /* Section header table entry size */  
  Elf32_Half    e_shnum;                /* Section header table entry count */  
  Elf32_Half    e_shstrndx;             /* Section header string table index */ 
} Elf32_Ehdr;

// program header
typedef struct elf32_phdr{
  Elf32_Word    p_type;           /* Segment type */
  Elf32_Off     p_offset;         /* Segment file offset */
  Elf32_Addr    p_vaddr;          /* Segment virtual address */
  Elf32_Addr    p_paddr;          /* Segment physical address */
  Elf32_Word    p_filesz;         /* Segment size in file */
  Elf32_Word    p_memsz;          /* Segment size in memory */
  Elf32_Word    p_flags;          /* Segment flags */
  Elf32_Word    p_align;          /* Segment alignment, file & memory */
} Elf32_Phdr;

// section header
typedef struct elf32_shdr {
  Elf32_Word    sh_name;          /* Section name, index in string tbl */
  Elf32_Word    sh_type;          /* Type of section */
  Elf32_Word    sh_flags;         /* Miscellaneous section attributes */
  Elf32_Addr    sh_addr;          /* Section virtual addr at execution */
  Elf32_Off     sh_offset;        /* Section file offset */
  Elf32_Word    sh_size;          /* Size of section in bytes */
  Elf32_Word    sh_link;          /* Index of another section */
  Elf32_Word    sh_info;          /* Additional section information */
  Elf32_Word    sh_addralign;     /* Section alignment */
  Elf32_Word    sh_entsize;       /* Entry size if section holds table */
} Elf32_Shdr;

   
 长大成年后,我啊爱不释手华晨宇林俊杰田馥甄的唱,但杰伦的歌被自己而言是无可取代,《以父之名》《园游会》《止战之殇》《黑色毛衣》这些歌简简单单,但随便多少年过去,不论我运动至哪里,音乐使响起前奏,我心中的那么根弦依然轻易就会给拨动。

二、解析elf文件

  所谓工欲善其事,必先利其器,在开头解析elf文件前,我们要事先找到同样慢慢悠悠合适的解析工具,readelf就是GNU/Linux官方推出的专用解析工具。有矣这个分析工具,我们就是得以慢慢分析elf文件。

   
 后来之专辑《摩羯座》《跨时代》等,有人说,杰伦变了,新专辑曲风已经无法入他们之程度,我为都为是不明了深遥远,今年己倒是转怀念搭了,可能是自家实在长大了、思想也成熟了有些。我怀念对每一个就喜欢杰伦的歌迷说,每个人且在转移,杰伦为不容许直接是深戏着对截棍唱着简单容易的马大哈少年,少年及父辈的转型无适于,很可能是我们内在的冲突,我们无情愿像日妥协,我们肯定自己还没有长大,而杰伦都成长,曲风发生变动在所难免。不论怎样,我还认定,杰伦用心做音乐之态势并从未更换,杰伦的歌唱也承载了80年间90年间多人口的后生记忆,他带来吃我们的激动永远不换。

2.1 解析工具readelf

  既然elf文件是Linux系统下常用之可执行文件格式,那么Linux社区一定会起配套的工具去分析其,是的,这个家伙就给readelf,在GNU工具集binutils里。

     
杰伦的演唱会,应该是本人尽深之遗憾,仿佛总有各种原因,学生时不敢花老人之钱去押,工作后而借口说没有工夫,前年好不爱下定了立志,却为一个视频从了退堂鼓,视频及说一个人口消费了几千查找黄牛买到票,结果于后排并杰伦的相同词原唱都没听清,却直接受旁边一个失恋的哥们边哭边大声唱歌《说好之福啊》,现在思维,那还要怎,我就只有请至终极一解除,我高度近视也绝非涉嫌,只是失去感受一下现场便好了(我会带齐望远镜的),不论他唱歌啊,我若听就吓了……有生之年,我一定要是错过押同样庙杰伦演唱会,再不疯狂,我们以及杰伦即便真的还尽矣!

2.1.1 GNU工具集(binutils)

  GNU是“GNU’s Not
Unix”的递归缩写,又称作GNU计划,很多知名的开源软件以及工具还是GNU开发的(比如有名的C语言编译器GCC)。binutils是GNU一系列binary小器的联谊,大家从底下的链接里找到官方binutils包。

主页:http://www.gnu.org/software/binutils/
仓库:git://sourceware.org/git/binutils-gdb.git
下载:http://ftp.gnu.org/gnu/binutils/
文档:https://sourceware.org/binutils/docs-2.29/binutils/index.html

  但是下上述包里的readelf会有一个问题,上述工具是在Linux系统下下的,而大家平常做ARM
Cortex-M开发多都是当windows平台下,那么怎么在windows下利用readelf工具也?别急,cygwin给了我们帮忙。

丁的终身,有一个偶像大好之,杰伦成为自之偶像,我觉着是自我满青春岁月里,一宗最特别之乐事。

2.1.2 cygwin(windows下使用GNU)

  Cygwin是一个于windows平台上运行的类UNIX模拟条件,是cygnus
solutions公司(已为Redhat收购)开发之自由软件。它对于学习UNIX/Linux操作环境,或者由UNIX到Windows的应用程序移植,尤其是运GNU工具集在Windows上进展嵌入式系统开发,非常实惠。

// 下载链接
Installer:http://cygwin.com/install.html
Package:  https://cygwin.com/packages/package_list.html
// 相关包(根据平台选择)
binutils                - GNU assembler, linker, and similar utilities
cygwin32-binutils       - Binutils for Cygwin 32bit toolchain
mingw64-x86_64-binutils - Binutils for MinGW-w64 Win64 toolchain 
mingw64-i686-binutils   - Binutils for MinGW-w64 Win32 toolchain

  下载安装好cygwin包后,便只是在安目录下\cygwin64\bin\找到x86_64-w64-mingw32-readelf.exe工具(豹哥选择的凡mingw64-x86_64-binutils包)。

2.1.3 readelf.exe用法

  readelf.exe以标准的windows命令行用法,使用–help可以列出所有命令option及其简介,下面就排有比常用之option。

C:\cygwin64\bin>x86_64-w64-mingw32-readelf.exe --help
Usage: readelf <option(s)> elf-file(s)
 Display information about the contents of ELF format files
 Options are:
  -a --all               Equivalent to: -h -l -S -s -r -d -V -A -I
  -h --file-header       Display the ELF file header
  -l --program-headers   Display the program headers
     --segments          An alias for --program-headers
  -S --section-headers   Display the sections' header
     --sections          An alias for --section-headers
  -t --section-details   Display the section details
  -e --headers           Equivalent to: -h -l -S
  -s --syms              Display the symbol table
     --symbols           An alias for --syms
  --dyn-syms             Display the dynamic symbol table
  -r --relocs            Display the relocations (if present)
  -d --dynamic           Display the dynamic section (if present)
  -V --version-info      Display the version sections (if present)
  -A --arch-specific     Display architecture specific information (if any)
  -I --histogram         Display histogram of bucket list lengths
  @<file>                Read options from <file>

2.2 逐步分析elf文件

  万事俱备了,开始分析elf文件,以第三节课project文件里demo工程为条例。编译链接该工程而每当D:\myProject\bsp\builds\demo\Release\Exe路径下得到demo.elf文件。该文件大小32612
bytes,显然这样简单的一个不怎么工程image
size不可能这样大,说明elf文件里的笔录信息数据占比较老好。

2.2.1 获得file header
C:\cygwin64\bin>x86_64-w64-mingw32-readelf.exe -h demo.elf
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x41
  Start of program headers:          31740 (bytes into file)
  Start of section headers:          31772 (bytes into file)
  Flags:                             0x5000000, Version5 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         1
  Size of section headers:           40 (bytes)
  Number of section headers:         21
  Section header string table index: 1

  第一步首先分析file header,前面介绍里说过file
header是位于文件最前的。通过readelf -h命令可以拿走file
header解析后底消息。让咱们来比一下,使用HexEditor直接打开demo.elf可获如下数据,仅得前52bytes(0x34)数据,因为Elf32_Ehdr大小就是52bytes:

offset(h)
00000000: 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00
00000010: 02 00 28 00 01 00 00 00 41 00 00 00 FC 7B 00 00
00000020: 1C 7C 00 00 00 00 00 05 34 00 20 00 01 00 28 00
00000030: 15 00 01 00 -- -- -- -- -- -- -- -- -- -- -- --

  可以看到前16byte凡e_ident[16],与分析后的Magic是一致的;再来说明prgram
header偏移e_phoff=0x00007BFC,数量e_phnum=0x0001,大小e_phentsize=0x0020,也是同析后底音相当的;余下可活动对照。

2.2.2 获得program header
C:\cygwin64\bin>x86_64-w64-mingw32-readelf.exe -l demo.elf

Elf file type is EXEC (Executable file)
Entry point 0x41
There are 1 program headers, starting at offset 31740

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000034 0x00000000 0x00000000 0x004c4 0x004c4 R E 0x100

 Section to Segment mapping:
  Segment Sections...
   00     A0 rw P1 ro

  再来分析program header,通过readelf -l命令可以拿走program
header解析后底信息。从点可以识破header起始位置在demo.elf的31740
byte处(与file header里的e_phoff信息是相应之),header信息提示program
data从offset 0x34起来,大小共0x4c4
bytes,Reset_Handler入口是0x41。继续在HexEditor查看31740高居起的32byte数据,因为Elf32_Phdr大小就32bytes:

offset(h)
00007BF0: -- -- -- -- -- -- -- -- -- -- -- -- 01 00 00 00
00007C00: 34 00 00 00 00 00 00 00 00 00 00 00 C4 04 00 00
00007C10: C4 04 00 00 05 00 00 00 00 01 00 00 -- -- -- --

  可以见到p_offset=0x00000034,p_memsz=0x000004c4,
与地方解析后的信是均等的;余下可自行对照。
这里的音信就是比主要了,因为及时指示了一切image
binary数据所在(知道了此信息,我们虽好一直写脚论根据elf文件生成image
binary),继续于HexEditor里看下(仅截取部分显得):

offset(h)
00000030: -- -- -- -- 00 20 00 10 41 00 00 00 03 04 00 00
00000040: 3F 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000060: 61 04 00 00 00 00 00 00 00 00 00 00 63 04 00 00
00000070: 65 04 00 00 72 B6 0E 48 0E 49 88 60 00 22 00 23
00000080: 00 24 00 25 00 26 00 27 B8 46 B9 46 BA 46 BB 46

  ARM系统的image前16单指针都是网中断向量,我们可见见SP=0x10002000,
PC=0x00000041,这与地方解析的Reset_Handler入口是0x41是相当的。

2.2.3 获得section header
c:\cygwin64\bin>x86_64-w64-mingw32-readelf.exe -S demo.elf
There are 21 section headers, starting at offset 0x7c1c:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 006338 000000 00      0   0  4
  [ 1] .shstrtab         STRTAB          00000000 006338 0000e6 00      0   0  4
  [ 2] .strtab           STRTAB          00000000 006420 000b7c 00      0   0  4
  [ 3] .symtab           SYMTAB          00000000 006f9c 000c60 10      2 135  4
  [ 4] A0 rw             PROGBITS        00000000 000034 000040 01  AX  0   0 256
  [ 5] P1 ro             PROGBITS        00000040 000074 000484 01  AX  0   0  4
  [ 6] P3 ui             NOBITS          10000000 0004f8 002000 01  WA  0   0  8
  [ 7] P2 rw             NOBITS          10002000 0004f8 000438 01  WA  0   0  8
  [ 8] .debug_abbrev     PROGBITS        00000000 0004f8 0002c6 01      0   0  0
  [ 9] .debug_aranges    PROGBITS        00000000 0007c0 00016c 01      0   0  0
  [10] .debug_frame      PROGBITS        00000000 00092c 00057c 01      0   0  0
  [11] .debug_info       PROGBITS        00000000 000ea8 000e2e 01      0   0  0
  [12] .debug_line       PROGBITS        00000000 001cd8 000dcb 01      0   0  0
  [13] .debug_loc        PROGBITS        00000000 002aa4 00024c 01      0   0  0
  [14] .debug_macinfo    PROGBITS        00000000 002cf0 00011e 01      0   0  0
  [15] .debug_pubnames   PROGBITS        00000000 002e10 00012a 01      0   0  0
  [16] .iar.debug_frame  PROGBITS        00000000 002f3c 00007e 01      0   0  0
  [17] .iar.debug_line   PROGBITS        00000000 002fbc 000367 01      0   0  0
  [18] .comment          PROGBITS        00000000 003324 002fa2 01      0   0  0
  [19] .iar.rtmodel      PROGBITS        00000000 0062c8 000047 01      0   0  0
  [20] .ARM.attributes   ARM_ATTRIBUTES  00000000 006310 000026 01      0   0  0
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  y (purecode), p (processor specific)

  再来分析section header,通过readelf -S命令可以得到section
header解析后的信。可以看到有好多只section,其中最为根本之4只section是A0(readonly
vector), P1(readonly code,data), P2(readwrite data, heap),
P3(STACK)。具体分析,各位朋友自己尝试看。

2.2.4 获得symbol list
c:cygwin64\bin>x86_64-w64-mingw32-readelf.exe -s demo.elf

Symbol table '.symtab' contains 198 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
    74: 10002018    16 OBJECT  LOCAL  DEFAULT    7 s_array
    75: 10002014     4 OBJECT  LOCAL  DEFAULT    7 s_variable0
    76: 10002010     4 OBJECT  LOCAL  DEFAULT    7 s_variable2
   135: 00000000     0 OBJECT  GLOBAL DEFAULT    4 __vector_table
   140: 00000041     0 FUNC    GLOBAL DEFAULT    5 Reset_Handler
   141: 00000098     4 OBJECT  GLOBAL DEFAULT    5 s_constant
   142: 000000ad    32 FUNC    GLOBAL DEFAULT    5 main
   143: 000000cd    14 FUNC    GLOBAL DEFAULT    5 normal_task
   144: 000000db    60 FUNC    GLOBAL DEFAULT    5 heap_task
   155: 0000034d    84 FUNC    GLOBAL DEFAULT    5 init_data_bss
   156: 000003a1    18 FUNC    GLOBAL DEFAULT    5 init_interrupts
   157: 000003dd    12 FUNC    GLOBAL DEFAULT    5 SystemInit
   186: 10002001    16 FUNC    GLOBAL DEFAULT    7 ram_task
   191: 10002034     4 OBJECT  GLOBAL DEFAULT    7 n_variable1

  通过readelf -s命令可以获symbol
list解析后的音信。可以见到有过多只symbol,豹哥在这边就排有以工程里打定义之函数和变量,从symbol表里我们好得知函数/变量在存储器中现实分配地址及长,这对于我们更加分析及调节应用是产生帮助的。

2.3 elf文件layout

  经过上等同节约对demo.elf里相继header的剖析,此时我们虽可以简简单单地描绘出elf文件layout。

File offset Data content Data size in bytes
0x00000000 ELF file header 52
0x00000034 Image binary (Section4-A0 rw, .intvec中断向量表) 0x40
0x00000074 Image binary (Section5-P1 ro, readonly section(.text, .rodata…)) 0x484
0x000004F8 Section8-20 (包含各种辅助调试和系统段.debug_xx, .iar.xx) 0x5E3E
0x00006336 NULL 0x2
0x00006338 Section1-.shstrtab字符串表 0xE6
0x00006420 Section2-.strtab字符串信息 0xB7C
0x00006F9C Section3-.symtab符号信息 0xC60
0x00007BFC ELF Program header 0x20
0x00007C1C ELF Section headers (0 – 20) 21 * 40

番外一、几个elf转换image工具

  于今天之海外篇里,豹哥吃大家顺便介绍几慢慢悠悠专业的elf文件转换成为image文件的工具。

工具1:GNU工具objcopy

位置:C:\cygwin64\bin>x86_64-w64-mingw32-objcopy.exe
用法:
      objcopy.exe -O binary -S demo.elf demo.bin
      objcopy.exe -O srec   -S demo.elf demo.s19

备注:一说需用arm-linux-objcopy,待验证

工具2:IAR工具ielftool.exe

位置:\IAR Systems\Embedded Workbench xxx\arm\bin\ielftool.exe
用法:
      ielftool.exe --bin  demo.elf demo.bin
      ielftool.exe --ihex demo.elf demo.hex
      ielftool.exe --srec demo.elf demo.s19

  至此,嵌入式开发里的executable文件(elf)文件豹哥就介绍了了,掌声以哪里~~~

相关文章