readelf

交叉编译链安装及工具集(gcc、readelf、objdump、objcopy和strip等)使用方法 主要解决编译链程序和目标程序运行环境不同的问题,如在x86环境上使用编译工具进行编译汇编链接,而生成的程序需要运行在ARM开发板上。 阅读详情

readelf elf文件格式分析

背景

目标文件

首先需要介绍的概念是目标文件(Object file)的概念。目标文件是计算机科学中编译器或汇编器处理源代码后所生成的代码(目标代码,Object code)的计算机文件,它常被称作二进制文件(binaries)。这个文件类型主要是区别于你看得懂的用人话写的代码文件(.c、.cpp etc.)、中间文件(.i)、汇编文件(.s)。常见的.exe、.dll、.so啥的都算目标文件。

目标文件有三种类型:

  • 可重定位的对象文件(Relocatable file)
    由汇编器汇编生成的 .o 文件(下面会详细讲到)
  • 可执行的对象文件(Executable file)
    可执行应用程序
  • 可被共享的对象文件(Shared object file)
    动态库文件

编译过程

编译的过程如下图所示

代码文件经过语言预处理器、编译器、汇编器和链接器处理,最终生成可执行目标文件。

下面以一个简单的c语言文件为例:

sum.c源文件内容如下:

1
2
3
4
5
6
7
8
9
int sum(int *a, int n)
{
  int i, s = 0;

  for (i = 0; i < n; ++i) {
    s += a[i];
  }
  return s;
}

通过运行C预处理器(cpp)可以生成sum.i中间文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1 "sum.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "sum.c"
int sum(int *a, int n)
{
  int i, s = 0;

  for (i = 0; i < n; ++i) {
    s += a[i];
  }
  return s;
}

通过运行C编译器(cc1),将中间文件生成为sum.s汇编文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  .file›"sum.i"
  .text
  .globl  sum
  .type›sum, @function
sum:
.LFB0:
  .cfi_startproc
  movl  $0, %eax
  movl  $0, %edx
  jmp›.L2
.L3:
  movslq  %edx, %rcx
  addl  (%rdi,%rcx,4), %eax
  addl  $1, %edx
.L2:
  cmpl  %esi, %edx
  jl  .L3
  rep ret
  .cfi_endproc
.LFE0:
  .size›sum, .-sum
  .ident  "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-36)"
  .section  .note.GNU-stack,"",@progbits

最终生成通过汇编器(as)生成一个可重定位目标文件(reloacatable object file)。

什么是ELF

系统里的目标文件是按照特定的目标文件格式来组织的,各个系统的目标文件格式都不相同。

从贝尔实验室诞生的第一个Unix系统使用的是a.out格式(直到今天,可执行文件仍然称为a.out文件)。Windows使用可移植可执行(PortableExecutable,PE)格式。Mac OS-X使用Mach-O格式。现代x86-64Linux和Unix系统使用可执行可链接格式(Executable and Linkable Format,ELF)。

ELF格式的文件在Linux系统下有.axf、 .bin、 .elf、 .o、 .prx、 .puff、 .ko、 .mod和.so等等

readelf指令

前面介绍了这么多ELF的背景知识,下面回来来说说readelf这个指令。这个指令正是用来查看目标文件的内容的。

ELF可重定位目标文件的格式

典型格式

典型的ELF可重定位目标文件的格式如下图:

其中:

  • .text 节里装载了程序的可执行机器码
  • .rodata 节里装载了只读数据
  • .data 节里面装载了被初始化的数据,包括全局和静态C变量
  • .bss 节里面装载了未被初始化的全局和静态C变量(在目标文件中只是占位符,不占空间)
  • .symtab 或者 .dynsym 节里面装载了符号信息
  • 以 .rel 打头的 节里面装载了重定位条目
  • .debug 一个调试符号表,只有使用了-g参数编译时才会有,用于debug
  • .line 用于记录C源程序的行号和.text节中机器指令之间的映射,也是只有使用了-g参数编译时才会有
  • .strtab 或者 .dynstr 节里面装载了字符串信息(以null结尾的字符串信息)

符号表部分解析

符号表每节定义如下:

1
2
3
4
5
6
7
8
9
typedef struct { 
    int   name;      /* String table offset */ 
    char  type:4,    /* Function or data (4 bits) */ 
	  binding:4; /* Local or global (4 bits) */ 
    char  reserved;  /* Unused */  
    short section;   /* Section header index */
    long  value;     /* Section offset or absolute address */ 
    long  size;      /* Object size in bytes */ 
} Elf64_Symbol;

具体解释如下:

举个例子🌰

以上面的sum.c生成的sum.o为例,我们选取readelf的-all参数输出全部内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
$readelf -all sum.o
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:                              REL (Relocatable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          536 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         11
  Section header string table index: 10

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .text             PROGBITS         0000000000000000  00000040
       000000000000001b  0000000000000000  AX       0     0     1
  [ 2] .data             PROGBITS         0000000000000000  0000005b
       0000000000000000  0000000000000000  WA       0     0     1
  [ 3] .bss              NOBITS           0000000000000000  0000005b
       0000000000000000  0000000000000000  WA       0     0     1
  1 int sum(int *a, int n)
  2 {
  [ 4] .comment          PROGBITS         0000000000000000  0000005b
       000000000000002e  0000000000000001  MS       0     0     1
  [ 5] .note.GNU-stack   PROGBITS         0000000000000000  00000089
       0000000000000000  0000000000000000           0     0     1
  [ 6] .eh_frame         PROGBITS         0000000000000000  00000090
       0000000000000030  0000000000000000   A       0     0     8
  [ 7] .rela.eh_frame    RELA             0000000000000000  000001a8
       0000000000000018  0000000000000018   I       8     6     8
  [ 8] .symtab           SYMTAB           0000000000000000  000000c0
       00000000000000d8  0000000000000018           9     8     8
  [ 9] .strtab           STRTAB           0000000000000000  00000198
       000000000000000b  0000000000000000           0     0     1
  [10] .shstrtab         STRTAB           0000000000000000  000001c0
       0000000000000054  0000000000000000           0     0     1
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),
  l (large), p (processor specific)

There are no section groups in this file.

There are no program headers in this file.

Relocation section '.rela.eh_frame' at offset 0x1a8 contains 1 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000000020  000200000002 R_X86_64_PC32     0000000000000000 .text + 0

The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.

Symbol table '.symtab' contains 9 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS sum.i
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    2
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT    3
     5: 0000000000000000     0 SECTION LOCAL  DEFAULT    5
     6: 0000000000000000     0 SECTION LOCAL  DEFAULT    6
     7: 0000000000000000     0 SECTION LOCAL  DEFAULT    4
     8: 0000000000000000    27 FUNC    GLOBAL DEFAULT    1 sum

No version information found in this file.

其中第一部分是ELF头(ELF header)中的描述信息。(用-h参数可以单独得到)。

最后一部分是符号表部分(用-s参数可以单独得到该部分),前面八个条目是链接器内部使用的局部符号,最后一行是全局符号sum定义的条目。可以通过最后一行看出,它是一个位于.text节中偏移量为0处的27字节函数。(Ndx部分表示在哪个节中,1表示.text节,3表示.data节,对应上面输出的Section Headers部分)

Android NDK  /Android/Sdk/ndk/16.1.4479499/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf  libserial_port.so -a >>serail_info.txt

此处涉及到逆向分析汇编原理部分  进一步了解

【精选】逆向分析-010Editor_010editor怎么用_° LuK的博客-优快云博客

参考 :ELF 文件解析 1-前述+文件头分析 - 知乎

nm readelf objdump objcopy 命令之间的关系 objdump, readelf, nm, 和 objcopy 是 GNU Binutils 套件的一部分,它们用于处理二进制文件。objdump: 这是一个能够提供各种信息的程序,包括反汇编输出、源代码交叉引用等。更具体地说,它能够读取并解析二进制文件,然后以人类可读的形式显示这些信息。例如,它可以显示出二进制文件的所有头信息,包括文件的大小、段的数量和类型等。此外,它还能显示二进制文件的每个段的内容,包括段内的机器码和对应的汇编代码。readelf: 这个程序用于显示 ELF 格式文件的详细信息。 阅读详情

相关推荐

windows的readelf.exe直接可用

windows的readelf.exe直接可用,在命令行调用。 readelf -a test.elf > elf_info.txt //导出elf变量地址信息 readelf -w test.elf > dwarf_info.txt //导出变量dwarf信息,查询结构体变量偏移值就靠这个了

如何在windows下读取elf并读取变量地址和成员地址

readelf -w test.elf > dwarf_info.txt //导出变量dwarf信息,查询结构体变量偏移值就靠这个了。直接在mingW的windows版下,找到readelf.exe,然后在cmd里面使用下面2句话即可。readelf -a test.elf > elf_info.txt //导出elf变量地址信息。做上位机的后面都知道怎么做了。

mirandali的专栏 2128

windows中查看elf文件

查看elf文件的工具包,包含有readelf.exe,nm.exe,objdump.exe以及如果不能运行,确实libiconv-2.dll这个组件也包含在里面 除了上述命令行工具,还有一个可视化的FileViewPro

在Windows中运行readelf读取ELF文件、在Git Bash中使用readelf工具

和都是分析ELF文件的工具,如果你的工作重点是对ELF文件的详细分析,特别是从格式和标准的角度来看,可能是更合适的工具。然而readelf是Linux上的工具,如果想在windows 上运行需要一些特殊的终端。readelf工具在binutils工具包中,打开 msys2终端输入: 2. 在Git Bash中安装readelf工具 1. 在MSYS2安卓能在windows上运行的readelf.exe文件,然后在MSYS2终端输入 找到readelf.exe文件,将它复制到某个目录下并将该目录

f694405313的博客 4404

ELF工具集合_readelf_windows_elf_

windows系统下的nm、readelf等工具

单窗算法的地表温度反演:谷歌地球引擎GEE代码

该论文基于Statistical Mono-Window(SMW)算法,对地表温度加以求解。其中,简单地说,SMW算法即是通过简单的线性关系,对由单热红外波段所得的大气表观亮温与地表温度之间的经验关系加以表示,从而计算得到LST。

2301_78834737的博客 559

readelf命令

readelf用来显示ELF格式目标文件的信息.可通过参数选项来控制显示哪些特定信息。(注意: readelf不支持显示archive文档, 也不支持64位的ELF文件)。 使用方法1:查看共享库的依赖库(NEEDED)和搜索名(SONAME)。readelf -d 例如:#readelf -d libuClibc-0.9.30rc2.so Dynamic se

可乐(平)的小小程序世界 1万+

AIAgent知识表示与推理:基于本体论与规则引擎的实现

AIAgent知识表示与推理:基于本体论与规则引擎的实现 1. 背景介绍 人工智能(AI)系统的核心是知识表示和推理,这是实现智能行为的基础。在过去的几十年里,人工智能领域一直致力于研究如何有效地表示和推理知识,以支持智能系统的决策和行为。其中,基于本体论的知识表示和

AI天才研究院 1495

objdump与readelf

objdump和readelf都可以用来查看二进制文件的一些内部信息. 区别在于objdump 借助BFD而更加通用一些, 可以应付不同文件格式, readelf则并不借助BFD, 而是直接读取ELF格式文件的信息, 按readelf手册页上所说, 得到的信息也略细致一些. 几个功能对比. 1. 反汇编代码 查看源代码被翻译成的汇编代码, 大概有3种方法, 1) 通过编译器

编程的本质是数学问题 1710

STM32F103+LAN9252实战:从站代码迁移中的5个硬件坑与解决方案

本文分享了将EtherCAT从站代码从STM32F767迁移至STM32F103平台时,搭配LAN9252遇到的五个典型硬件问题及解决方案。核心挑战包括时钟源不匹配、FSMC时序配置、中断映射错误、片选资源不足以及Flash烧录异常。文章通过实战经验,强调了硬件差异对代码迁移的关键影响,并提供了具体的调试思路与配置方法。

p5l2m9n4o6q的博客 698

离线AI实战指南:本地部署大模型处理PDF/Word/Excel

离线AI是指在无网络、不上传数据前提下,于个人设备运行大语言模型并完成文档理解、多轮对话与代码辅助等任务的技术方案。其核心依赖本地模型推理、文档解析向量化和轻量级对话调度三大能力。随着Phi-3、Qwen2、Llama3等轻量化开源模型普及,以及Ollama、LM Studio等易用工具成熟,普通用户已可在主流笔记本上实现PDF摘要、合同比对、代码注释等真实办公场景。本文聚焦离线AI的硬件适配、模型选型、文件处理链路与知识库构建,尤其强调中文OCR支持、结构化文档提取与CPU/GPU混合推理优化,助力非开发

weixin_31968639的博客 495

对比objdump与readelf readelf objdump nm

objdump和readelf都可以用来查看二进制文件的一些内部信息. 区别在于objdump 借助BFD而更加通用一些, 可以应付不同文件格式, readelf则并不借助BFD,  而是直接读取ELF格式文件的信息, 按readelf手册页上所说, 得到的信息也略细致一些.  几个功能对比.  1. 反汇编代码 查看源代码被翻译成的汇编代码, 大概有3种方法,  1) 通过编译器

lijun5635的专栏 3150

基于文件通信的QMT量化交易信号桥接方案设计与实现

在量化交易系统开发中,进程间通信(IPC)是连接不同计算模块、实现策略逻辑与交易执行解耦的关键技术。其核心原理在于允许运行于独立环境或进程的程序安全、可靠地交换数据。文件系统通信作为一种经典的IPC方法,因其实现简单、跨平台兼容性好且数据可持久化,在非高频场景下具有重要技术价值。它尤其适用于需要将外部复杂计算环境(如配备丰富数据科学库的Python环境)与专用交易终端(如迅投QMT)集成的应用场景。通过约定文件路径与数据格式,外部程序可将包含交易指令的JSON信号文件写入特定目录,而交易终端通过轮询或监听机

weixin_28678151的博客 419

readelf命令解析及演示

目录概述简述演示 概述 功能:用于显示ELF文件(如.so、.a、.o文件等)的相关信息。 readelf命令可显示一个或多个ELF格式对象文件的信息。后面可加一些选项控制要显示的特定信息。 elffile …是要检查的目标文件。支持32位和64位ELF文件,也支持包含ELF文件的文档(如使用ar命令将一些elf文件打包生成的lib*.a之类的文件)。 该程序执行与objdump相似的功能,但更详细,并且独立于BFD库而存在,因此,即使BFD中存在错误,readelf也不会受到影响。 Usage: read

LYJ_viviani的博客 3938

基于STM32的嵌入式平台实现EtherCAT主站

本文将介绍如何在基于STM32的嵌入式平台上构建EtherCAT主站,并提供相应的源代码。使用SOEM库提供的API函数,我们可以实现与EtherCAT从站设备的实时通信和数据交换。在STM32的代码中,使用SOEM库提供的API函数初始化EtherCAT主站。在SOEM库中,我们可以找到EtherCAT主站的实现代码和相关的API函数。使用SOEM库提供的API函数实现EtherCAT主站的功能,包括发送和接收EtherCAT数据帧、处理从站设备的状态等。确保连接正常并且设备能够相互通信。

CodeSageX的博客 2834

R语言Rstudio突然无法启动且报错:ERROR system error 42 [str: 一, len: 3, from: UTF-8, to: ISO8859-1]...如何解决

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2848

readelf命令和ELF文件详解

三类目标文件(ELF): 1.可重定位目标文件 (.o) 每个.o文件都是由对应的.c文件通过编译器和汇编器生成;包含代码和数据,代码和数据地址都从0开始。通过gcc -c xxx.c 得到。 2.可执行目标文件(默认为a.out) 由链接器生成,包含的代码和数据可以直接通过加载器加载到内存中并被执行。通过gcc -o xxx.c 得到。 3.共享目标文件...

ziyonghong的博客 4761

热红外图像小目标检测算法综述

热红外小目标检测算法综述,着重介绍基于深度学习的小目标检测算法

Littro Innovations 4244

Linux命令:readelf

Linux命令:readelf

深度安全实验室 957

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

linux readelf 指令

readelf是Linux系统中用于分析ELF格式二进制文件的命令行工具,可查看可执行文件、共享库等的内部结构,但不会修改文件内容。它支持多种选项,如-h显示文件头、-d显示动态段信息等。典型应用包括检查依赖库(NEEDED条目)、分析程序结构等,尤其适用于交叉编译环境下的依赖排查和系统裁剪。如使用aarch64-linux-gnu-readelf -d libcurl.so | grep NEEDED可快速获取ARM64架构下curl库的运行时依赖,帮助解决缺失库或版本冲突问题。

qq_42831621的博客 307

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

readelf的安装

大多数情况下,linux环境上默认可能都装有readelf,但是也有少数情况可能没有装,我自己用的ubuntu的linux虚拟机就没有装readelf。readelf本身是一个分析elf很好用的工具,但是在网上搜索一遍,发现介绍怎么自己装的还真没有。   Ubuntu下,apt-get install readelf 系统会告诉你,根本就没有。   网上搜索半天,也没有找到readelf

叶落无痕,枫过有情…… 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

linux中readelf命令详解

用于显示elf格式文件的信息。

wang11876的博客 2164

linux readelf,Linux readelf命令使用

readelf用来显示ELF格式目标文件的信息.可通过参数选项来控制显示哪些特定信息。(注意: readelf不支持显示archive文档, 也不支持64位的ELF文件)。使用方法1:查看共享库的依赖库(NEEDED)和搜索名(SONAME)。readelf -d 例如:#readelf -d libuClibc-0.9.30rc2.soDynamic section at offset 0x90...

weixin_30689519的博客 537
上一篇: SRS Config 一 基础配置
下一篇: 傅里叶变换的意义和理解(通俗易懂)
江太翁
博客等级 码龄15年 271粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值