.symtab】的更多相关文章

http://blog.csdn.net/beyond702/article/details/50979340 原文如下: shared library (.so) "Program Library Howto-Shared Libraries"是很好的材料, 下面的内容多是据此整理的. 定义:Shared libraries are libraries that are loaded by programs when they start.使用shared library(共享库)会…
参考:剖析.o文件ELF组成 目标文件 .symtab中记录的符号是从.s文件来的,所以.s这个汇编文件很关键. .symtab所记录符号的种类 示例代码 a.c ; static float a_va2 = 200.0; static void a_fun2(void) { a_va2 += ; } extern int a_fun1(int a) { b_va1 = b_va1+; b_fun1(); a_fun2(); } b.c ; int b_fun2(void) { ... } in…
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57e3a3bc42eb88da6d4be143 作者:王赛 1. 前言 Android 系统安全愈发重要,像传统pc安全的可执行文件加固一样,应用加固是Android系统安全中非常重要的一环.目前Android 应用加固可以分为dex加固和Native加固,Native 加固的保护对象为 Native 层的 SO 文件,使用加壳.反调试.混淆.VM 等手段增加SO文件的反编译难…
➠更多技术干货请戳:听云博客 0x01  Mach-O格式简单介绍 Mach-O文件格式是 OS X 与 iOS 系统上的可执行文件格式,类似于windows的 PE 文件 与 Linux(其他 Unix like)的 ELF 文件,如果不彻底搞清楚Mach-O的格式与相关内容,那么深入研究 xnu 内核就无从谈起. Mach-O文件的格式如下图所示: 有如下几个部分组成: 1. Header:保存了Mach-O的一些基本信息,包括了平台.文件类型.LoadCommands的个数等等. 2. L…
针对这些问题,这次做一个补充: 一,可重定位文件的格式是什么,以main.o为例, 格式为ELF ,包括:{1,ELF Header 它描述了整个文件的文件属性,包括文件是否可以执行,是静态链接还是动态链接及入口地址(若是可执行                                             文件),目标硬件,目标操作系统等等. 2,   .text(代码段) 按四字节对齐 一般C语言编译后执行语句都编译成机器代码,保存在这个段中 3,   .data(数据段) 已初始化…
ELF文件格式是一个开发标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件 可执行文件 共享库 现在分析一下上一篇文章中经过汇编之后生成的目标文件max.o和链接之后生成的可执行文件max的格式,从而理解汇编.链接和加载执行的过程. 一.目标文件 ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器看来它是由Program Hea…
一.为什么要使用模块 由于linux使用的是整体结构,不是模块化的结构,整体结构实现的操作系统可扩展性差.linux为了扩展系统,使用了模块的技术,模块能够从系统中动态装入和卸载,这样使得linux也具有很好的可扩展性. 二.linux中哪些代码作为模块实现,哪些直接编译进内核? 当然我们是尽量把代码编译成模块,这样就可以根据需要进行链接,内核的代码量也会少很多.几乎所有的高层组件—文件系统.设备驱动程序.可执行格式.网络层等等—都可以作为模块进行编译. 然而有些代码确必须直接编译进内核.这些代…
20145233 2016-2017 1 linux题目总结 第一周考试知识汇总 判断:实验楼环境中所有的默认系统用户名和密码均为 shiyanlou.(x ). 填空:Linux Bash中,Ctrl+a快捷键的作用是(将光标移至输入行头,相当于Home键). 判断:Linux Bash中, 可以使用man printf查看C语言中printf函数的帮助文档. (x) 填空:在Ubuntu中,使用(sudo apt-get install ddd)来安装ddd软件. 填空:在 Linux 里面…
声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的.也正因为这些错误,加深了我的学习深度. 最近因为在学习一些调试的技术,但是很少有提到如何在函数运行时实现函数替换的. 为什么会想到这一点?因为在学习调试时,难免会看到一些内核方面的调试技术,内核中的调试有一个kprobe,很强大,可以实现运行时的函数替换.其原理就是hook,钩子,但是学习了这个kp…
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…
1.函数原型符合设计要求,函数定义符合认知规律,做到见名知义,最少词汇量包含最大的信息量. 2.合理运用空行提高代码的可读性.从框架上来说有: 变量定义 初始化变量 处理 输出 返回值 3.采用伪码的方式简化问题,降低编程难度,如打印最长文本行的算法框架: while(还有未处理的行) if(该行比已处理的最长行还要长) { 保存该行为最长行 保存该行的长度 } 打印最长的行 4.状态变量辅助字符串处理,如统计单词数中的 #define IN 1 #define OUT 0 初始化state =…
转自:http://blog.csdn.net/chrovery/article/details/51088425 转自 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27717694&id=3971861 一.前言 对于现在编译的一些module要insmod在系统上时,可能会报各种各样的错误.这些错误仔细研读内核源码,都能找出原因.2.6 内核以前的insmod部分主要依赖于modutils源码包,在用户层基本将工作完成…
环境介绍: 开发板:qq2440 交叉编译器:arm-linux-gcc 3.4.1 内核版本:2.6.13 一.针对该类问题从两个方面入手: 1.从权限出发,权限不够会出现此问题 2.从库文件出发,一般是缺少库文件导致的 二.正好我今天遇到的是第二种情形: 1.查看应用程序led需要的库文件:arm-linux-readelf -a led,该命令输出的内容如下: ELF Header:  Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 0…
一.ELF文件格式概述 1. ELF文件 ELF:Executable and Linking Format,是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. 2. 三种类型 (1)可重定位文件 编译器和汇编器创建 运行前需要被链接器处理 (2)可执行文件 完成了所有重定位工作和符号解析 除了运行时解析的共享库符号 (3)共享库文件 链接器需要的符号信息 运行时可以直接执行的代码 二.分析一个ELF文件 以一个最简单…
1. 前言 Android 系统安全愈发重要,像传统pc安全的可执行文件加固一样,应用加固是Android系统安全中非常重要的一环.目前Android 应用加固可以分为dex加固和Native加固,Native 加固的保护对象为 Native 层的 SO 文件,使用加壳.反调试.混淆.VM 等手段增加SO文件的反编译难度.目前最主流的 SO 文件保护方案还是加壳技术, 在SO文件加壳和脱壳的攻防技术领域,最重要的基础的便是对于 Linker 即装载链接机制的理解.对于非安全方向开发者,深刻理解系…
printf背后的故事 说起编程语言,C语言大家再熟悉不过.说起最简单的代码,Helloworld更是众所周知.一条简单的printf语句便可以完成这个简单的功能,可是printf背后到底做了什么事情呢?可能很多人不曾在意,也或许你比我还要好奇!那我们就聊聊printf背后的故事. 一.printf的代码在哪里? 显然,Helloworld的源代码需要经过编译器编译,操作系统的加载才能正确执行.而编译器包含预编译.编译.汇编和链接四个步骤. #include<stdio.h> int main…
本文主要内容: 引论 符号表与zval 引用原理 回到最初的问题 一.引论 很久之前写了一篇关于引用的文章,当时写的寥寥草草,很多原理都没有说清楚.最近在翻阅Derick Rethans(home: http://derickrethans.nl/ Github: https://github.com/derickr)大牛之前做的报告时,发现了一篇讲解PHP引用机制的文章,也就是这个PDF.文中从zval和符号表的角度讲解了引用计数.引用传参.引用返回.全局参数等的原理,洋洋洒洒,图文并茂,甚是…
转载自http://bbs.pediy.com/showthread.php?t=191649 以前一直对.so文件加载时解密不懂,不了解其工作原理和实现思路.最近翻看各种资料,有了一些思路.看到论坛没有类似帖子,故来一帖,也作为学习笔记.限于水平,本菜没有找到安卓平台一些具体实现思路,这些方法都是借鉴其他平台的实现思路和本菜的YY,肯定会有不少疏漏和错误之处,还请各位大牛指正,感激不尽! 简单粗暴的so加解密实现一.  概述利用动态链接库实现安卓应用的核心部分,能一定程度的对抗逆向.由于ida…
ilocker:关注 Android 安全(新手) QQ: 2597294287 ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图: ELF header 位于文件的最开始处,描述整个文件的组织结构. Program Header Table 告诉系统如何创建进程镜像,在执行程序时必须存在,在 relocatable files 中则不需要.每个 program header 分别描述一个 segment,包括 segment 在文件和内存中的大小及地址等等.…
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 链接器把一些独立的 object files 和库文件链接起来,形成可执行文件.在这个过程中,链接器需要解决一些符号的引用以及指令的重定位. 除此之外,还有一个动态链接的过程.比如有些符号是定义在某个 so 文件中的,需要由动态链接器在装载的过程中进行一些符号查找和地址重定位的工作.要完成此工作,动态链接器需要一些信息,它们存储在一些特殊的 section 中,比如 .dynamic. section 和…
catalog . 引言 . 基于so文件劫持进行代码注入 . 基于函数符号表(PLT)中库函数入口地址的修改进行代码注入 . PLT redirection through shared object injection into a running process . 基于ptrace() Linux调试API函数进行代码注入 . Linux Hotpatch技术 . 基于软件输入控制漏洞(overflow)进行代码注入 . 动态共享库的保护技术 0. 引言 从本质上来说,代码注入.so注入…
catalog . INTRODUCTION . THE PROCESS IMAGE . THE CORE IMAGE . EXECUTABLE RECONSTRUCTION . FAILURES IN RECONSTRUCTION . USES OF RECONSTRUCTION . Helper Tools . Code For New Linux Kernel 1. INTRODUCTION This article documents the results from experimen…
catalog . 概述 . 使用模块 . 插入和删除模块 . 自动化与热插拔 . 版本控制 1. 概述 模块(module)是一种向Linux内核添加设备驱动程序.文件系统及其他组件的有效方法,而无需连编新内核或重启系统,模块消除了宏内核的许多限制,模块有许多优点 . 通过使用模块,内核发布者能够预先编译大量驱动程序,但并不会造成内核镜像发生膨胀,在自动检测硬件(例如USB)或用户提示之后,安装例程选择适当的模块并将其添加到内核中 . 内核开发者可以将试验性的代码打包到模块中,模块可以卸载.修…
目录 . 动态链接的意义 . 地址无关代码: PIC . 延迟版定(PLT Procedure Linkage Table) . 动态链接相关结构 . 动态链接的步骤和实现 . Linux动态链接器实现 . 显式运行时链接 . 共享库系统路径 && 默认加载顺序 1. 动态链接的意义 . 静态链接对内存和磁盘的浪费很严重,在静态链接中,C语言静态库是很典型的占用空间的例子 . 静态链接对程序的更新.部署.发布会造成严重的麻烦 为了解决这些问题,最好的思路就是把程序的模块相互分割开来,形成独…
目录 . 引言 . Kill Process By Kill Command && SIGNAL . Kill Process By Resource Limits . Kill Process By Code Injection Into Running Process Via GDB . Kill Process By Using Cross Process Virtual Memory Modify To Crash Process && process_vm_wri…
Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi.o .a文件(静态库文件) 创建atoi.a 使用atoi.a .so文件(共享库文件) 创建atoi.so 使用atoi.so .la文件(libtool archive) libtool的使用 1. 创建 Libtool 对象文件 2. 创建 Libtool 库 3. 安装 Libtool 库…
文章来源:华清远见嵌入式学院,原文地址:http://www.embedu.org/Column/Column699.htm 作者:冯老师,华清远见嵌入式学院讲师. 1. 程序源码如下: 2.命令 gcc –E simple_section.c –o simple_section.i         gcc –S simple_section.i –o simple_section.s         gcc –c simple_section.s –o simple_section.o    …
<深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将各种数据和代码收集起来成并组合成为一个单一文件的过程(这个文件可以被拷贝到存储器并且执行) 场合: 编译时:即源代码被翻译成机器代码 加载时:程序被加载器加载到存储器并执行 运行时 作用: 使得分离编译成为可能(将大型应用程序分解为若干个小模块) 2.铺垫--编译驱动程序以及目标文件.符号表 编译驱动程序代表…
1.程序的编译  一般而言,大多数编译系统都提供编译驱动程序(complier driver),根据用户需求调用语言预处理器,编译器,汇编器和链接器.例如有如下历程://main.c void swap(); int buf[2]={1, 2}; int main(){  swap();  return 0;} //swap.c int *bufp0 = &buf[0]int *bufp1; void swap(){  int temp;  bufp1 = &buf[1];  temp =…