readelf命令】的更多相关文章

可以用readelf命令来查看elf文件内容,跟objdump相比,这个命令更详细. 1. readelf -h SimpleSection.o ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 45为E 4C为L 46为F Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V A…
其实问题的本质是对elf格式的理解问题,因为是查看so库的符号表发现的问题. 事情起因是这样的,由于我的一个程序编译的时候出现了undefined reference to “XXX”的错误,需要链接特定的so库,发现用nm [file]找不到“XXX”函数符号,结果用readelf -s [file] 就找到了.其实问题是我对so理解的不深刻. 一般来说,对于一个so库有两个符号表,一个是“正常的”(在.symtab和.strtab节中).一个是动态的(.dynsym和.dynstr节中).如…
一.简介 readelf用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息.这里的elf-file(s)就表示那些被检查的文件.可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的"静态库"文件).  这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目…
http://blog.csdn.net/edonlii/article/details/8779075 1. 读取ELF文件头: $ readelf -h signELF Header:  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  Class:                                                  ELF64  Data:                            …
//查看文件头信息 readelf -h [file] //查看文件依赖的动态库 readelf -d [file] //查看文件中的符号 readelf -s [file]…
GCC编译出来的object(目标文件)getPon.o,在链接时(ld)报了一个错误说找不到一个函数(undefined reference to identifier devCtl_getEtherLanHostStatus),可是在源代码明明是有这一个函数.只不过被"#ifdef "宏个括起来了,最可能的原因就是这个宏没有开,函数没有被编译进去.怎样确认这一点哪?就用上readelf命令了,Linux下的可执行文件格式是"ELF32"或者是"ELF6…
01- 复习 tar tvf xxx 查看压缩包内容 区分前后台: 是否能和用户交互 Vmware选桥接模式 会给系统虚拟一个和外部相同网段的ip 02- vim扩展操作 因为不是做嵌入式开发的 所以这些东西不是特别重要 简单过一遍 缩进: 右缩进 两个>> 左缩进 两个<< 4行右缩进  4>> 想把m变量改成n: 15,17s /f/m/g r替换当前字符 R 替换当前光标后的字符 [d 查看宏: (这个宏是在上面定义的) 在程序中使用man page: 光标移动到…
linux下查看动态链接库依赖关系的命令 x86:ldd    *.so arm:arm-linux-readelf    -d    *.so 实际例子:以项目中用到的库librtsp.so分析:lijun@ubuntu:~/workspace$ arm-hisiv100nptl-linux-ld -d librtsp.so arm-hisiv100nptl-linux-ld: warning: liblog.so, needed by librtsp.so, not found (try u…
一.首先对readelf常用的参数进行简单说明: readelf命令是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用,下面以ELF格式可执行文件test为例详细介绍: 1.readelf -v       显示版本 2.readelf -h       显示帮助 3.readelf -a test           显示test的全部信息 4.readelf -h test           显示test的ELF Header的文件头信息(就是ELF文件开始的前5…
readelf的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 D…
这个实验有两个目的: 1.linux的可执行命令例如:ls .cd等都是二进制elf格式文件等,后面的逻辑是什么,我们怎么窥探底层内容. 2.ELF可执行文件默认从地址0x080480000开始分配 3../和 cp到/usr/bin下就可以直接执行命令4.写一个c程序获取Linux 内存页基页大小…
Linux模块机制浅析   Linux允许用户通过插入模块,实现干预内核的目的.一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析. 模块的Hello World! 我们通过创建一个简单的模块进行测试.首先是源文件main.c和Makefile. florian@florian-pc:~/module$ cat main.c #include<linux/module.h> #include<linux/init.h> static int __…
为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在<x86汇编程序基础(AT&T语法)>一文中我们汇编和链接的步骤是: $ as hello.s -o hello.o $ ld hello.o -o hello 我们用gcc main.c -o main开编译一个c程序,其实际分为三个步骤:编译.汇编.链接 $ gcc -S main.c 生成汇编代码 $ gcc -c main.s 生成目标文件 $ gcc main.o 生成可执行文件 我们…
以下面C程序为例: #include <stdio.h> ; ; ; int c; int main(void) { ; char b[] = "Hello World"; register ; printf("Hello World%d\n", c); ; } 我们在全局作用域和main函数的局部作用域各定义了一些变量,并且引入一些新的关键字const, static, register来修饰变量,那么这些变量的存储空间是怎么分配的呢?我们编译之后用r…
linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf.o文件. 查看scn15elf.o中各个段和符号表的信息. 各个段的详细信息如下. 符号表的信息如下: 使用readelf命令查看各个段的详细信息: 段表信息如下: 符号表信息如下: 下面让我们开始分析文件头吧! 由于我的虚拟机是32位的,我下面就主要以32位的系统进行分析,就不比较32位机和64…
<Linux及安全>实践三 ELF格式文件分析 一.基础操作 1.查看大小端.32还是64 由此可以看出,本人实践所用到的是32位Ubuntu,数据存储采用小端法. 2.编写hello.c文件 3.查看文件类型.大小 可以看到是可重定位文件,大小为1028比特 4.以16进制形式输出hello.o文件 5.通过ELF headers table阅读文件各个段的信息 可以看到,Size of this header(文件头部)52bytes 二.ELF文件格式分析 1.查看ELF头部定义 ELF…
XEN启动过程     ‍Xen Hypervisor运行在Ring0,在启动过程中,Xen首先被引导:系统由Grub启动,遵循Multiboot引导规范:然后Linux内核做为module也被引导入内存,同时initrd镜像文件也一样.整个引导过程示: ‍‍‍ 1 当加电后首先是BIOS自检.Grub引导.Xen遵循Multiboot引导规范,它需要从Grub读入内存信息,通过置位标志位第1位来实现的. 主要过程是从grub-xen(‍head.S, trampoline.S, x86_32.…
COREDUMP调试的使用 一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件. 通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态 存储生成第一个文件,许多的程序出错…
printf背后的故事 说起编程语言,C语言大家再熟悉不过.说起最简单的代码,Helloworld更是众所周知.一条简单的printf语句便可以完成这个简单的功能,可是printf背后到底做了什么事情呢?可能很多人不曾在意,也或许你比我还要好奇!那我们就聊聊printf背后的故事. 一.printf的代码在哪里? 显然,Helloworld的源代码需要经过编译器编译,操作系统的加载才能正确执行.而编译器包含预编译.编译.汇编和链接四个步骤. #include<stdio.h> int main…
一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件. 通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态 存储生成第一个文件,许多的程序出错的时候都会产生一个core文…
实践2.4 ELF文件格式分析 1.ELF文件头 查看/usr/include/elf.h文件: #define EI_NIDENT (16) typedef struct { unsigned char e_ident[EI_NIDENT]; /* 魔数和其他信息 */ Elf32_Half e_type; /* 目标文件类型 */ Elf32_Half e_machine; /* 硬件平台 */ Elf32_Word e_version; /* elf头部版本 */ Elf32_Addr e…
转载自:http://blog.csdn.net/embedded_hunter http://www.360doc.com/content/12/0405/00/1671317_200882538.shtml Linux应用程序在内存中的布局,由高地址到低地址依次为:栈.堆.BSS段.数据段.代码段. 代码段的起始地址固定为0x8048000,无论哪一个应用程序它的代码段起始地址一定是0x8048000,这里的地址虚拟地址,映射到不同的物理地址中去. 堆主要用来分配动态内存,操作系统提供了ma…
1.   序 最近在折腾各种.so,碰到了一些问题,一开始对于很多错误也没有头绪,茫然不知所措.索性化了一天多时间将<<程序员的自我修养—链接.装载与库>>中部分内容略读了一遍,主要是关于编译,链接和加载这块的.于是顺便做个笔记,方便以后回顾.基本上知道了这些,对于编译,链接和加载过程中产生的各种问题,应该就能从根本上理解并解决了.其实以前上学时也看过那本经典的<<Linker and loader>>,当时还写了篇<<链接器和加载器原理>…
前两天写了一个动态库,然后试图编译到程序里面去运行,结果发现编译的时候通过gcc的-L参数来指定路径仅仅能让编译通过,运行时还是会出问题的. 比如下面这个例子: main.c是主程序,sum.c中间含有一个函数add,用来执行加法,代码如下: /* * main.c */ #include <stdio.h> int add(int a, int b); int main(int argc,char *argv[]) { printf(,)); ; } /* * sum.c */ int ad…
arm-elf-gcc交叉编译器的使用教程 一开始需要安装arm-elf-gcc,但是这是一个32位的程序,我是安装了64位的系统,据说安装ia32.libs依赖库能运行这个,但是看到博客上面前人安装完了系统图标少了一半,然后就怕了.经过了翻看ubuntu论坛和各种博客,才知道14版之后的ubuntu64位官方已经抛弃了ia32.libs这个依赖库,在源列表中也是找不到的.但是官方自身已经支持32位,自带32位依赖库,在根目录下面就有一个lib32文件夹. 安装教程 博主使用的是arm-elf-…
为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题.在讲例 18.1 “最简单的汇编程序”时,我们的汇编和链接步骤是: $ as hello.s -o hello.o $ ld hello.o -o hello 以前我们常用gcc main.c -o main命令编译一个程序,其实也可以分三步做,第一步生成汇编代码,第二步生成目标文件,第三步生成可执行文件: $ gcc -S main.c $ gcc -c main.s $ gcc main.o -S选项生…
前言 对于 GRUB 的加载流程,网上绝大部分都是写对 menu.lst, grub.cfg 这些 GRUB 配置文件的编写流程,就像是写脚本语言一样,用些关键字就能让 PC机能正确启动桌面 Linux 了.但这只是 GRUB 的使用,而不是GRUB的分析. 本来是没有想要探究 GRUB 的想法,直到我在自制toy kernel 的学习中进入了 "虚拟内存管理"这一章节.很多介绍虚拟内存管理的时候都会说到 linux 的内存管理,linux 内核会加载到系统 3G-4G 的虚拟内存中,…
因为用了c++0x的一些新特性,必须使用4.6及以上的版本编译,所以使用了4.7编译,运行时提示错误 libstdc++.so.6(GLIBCXX_3.4.14) 错误 这个时候下了个glibc2.7的代码进行编译,并且编译安装后.. 哈,直接系统崩溃,所有的工具全部用不了,包括bash进程来起不来.只能重新 参考 ------------------------------------------------------- Glibc安装的库中有一个为ld-linux.so.X,其中X为一个数…
感谢这篇文章的作者:    http://www.cnblogs.com/strugglesometimes/p/4231359.html 编译是个很蛋疼的事情,本想把linux0.12在bochs上跑起来然后就可以各模块的学习,没想各种问题. 问题1: 1 gas -c -o boot/head.o boot/head.s 2 make: gas: Command not found gas已过时,将所有Makfile里gas -> as 具体解决方法 1 msed gas as msed 是…
原文网址:http://blog.sina.com.cn/s/blog_533074eb0101ez5q.html Android 编译环境 本身比较复杂,且不像普通的编译环境:只有顶层目录下才有 Makefile 文件,而其他的每个component 都使用统一标准的 Android.mk . Android.mk 文件本身是比较简单的,不过它并不是我们熟悉的Makefile ,而是经过了 Android 自身编译系统的很多处理,因此要真正理清楚其中的联系还比较复杂,不过这种方式的好处在于,编…