1 库的分类 根据链接时期的不同,库又有静态库和动态库之分。 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行。 有别于静态库,动态库的链接是在程序执行的时候被链接的。所以,即使程序编译完,库仍须保留在系统上,以供程 ...
分类:
其他好文 时间:
2018-11-22 13:16:05
阅读次数:
229
因为是初次系统的学习Linux内核,过程中遇到了一些常常出现的名词。似曾相识,但对他们的含义又不是非常清楚。因此,将搜索到的内容进行一下汇总。 1.vmlinux vmlinux是一个包括linux kernel的静态链接的可运行文件。文件类型是linux接受的可运行文件格式之中的一个(ELF、CO ...
分类:
系统相关 时间:
2018-11-13 15:19:47
阅读次数:
217
前面链接地址都是0x0,可以从nor正常启动内核和文件系统。现在把链接地址改成0x33f00000 一旦更改了链接地址, u-boot从nor flash加载时,串口没有任何输出 添加文件boot_init.c #define NFCONF (*((volatile unsigned long *) ...
分类:
其他好文 时间:
2018-11-03 23:04:51
阅读次数:
193
GOT应该保存的是puts函数的绝对虚地址,这里为什么保存的却是puts@plt的第二条指令呢? 原来“解释器”将动态库载入内存后,并没有直接将函数地址更新到GOT表中,而是在函数第一次被调用时,才会进行函数地址的重定位,这样做的好处是可以加快程序加载速度,尤其对大型程序来说。有关这方面的更详细的信 ...
分类:
其他好文 时间:
2018-11-03 19:21:27
阅读次数:
251
对于一个可执行文件,可以收集到的最有用的信息之一,就是它的导入表。导入函数是一个程序所使用的但存储在另一程序中的那些函数,比如包含了对于很多程序都通用的一些代码函数库代码库可以通过链接方式,连接到主程序中。 程序员选择将一些导入函数链接到他们编写的程序中,这让他们不必重新再多个程序重复实现特定功能。 ...
分类:
其他好文 时间:
2018-10-30 20:02:55
阅读次数:
109
ARM ELF的函数重定位与x86是一致的,但由于汇编指令不同,再鼓捣一遍。 示例代码: 通过 readelf -r 可以查看ELF中所有需要重定位的函数,我们以fopen()函数为例,分析其重定位过程。 首先main()函数中,通过 bl 82f4调用fopen(),82f4是一个16进制表示的地 ...
分类:
其他好文 时间:
2018-10-28 00:07:36
阅读次数:
519
链接库本质上是一段可执行的二进制代码,可以被操作系统载入内存执行。按加载的时机不同,链接库可以分为静态链接库和动态链接库。 静态链接库:编译过程中加载进可执行文件的库(静态库省去了运行时加载的消耗,但会导致可执行文件体积增大)动态链接库:程序运行过程中,动态加载进内存的库(动态库加载需要资源消耗,但 ...
分类:
系统相关 时间:
2018-10-26 22:19:07
阅读次数:
262
0x00 前言 对于加壳程序第一件事就是要找到OEP(oringinal Entry point),由于加壳的缘故,当PE文件载入OD或者其他调试软件时进入的的往往是壳程序的入口地址。所以要进行逆向分析第一步就必须找到PE程序的原始入口点。 0x01 壳的加载过程 壳和病毒在某些方面比较类似,都需要 ...
分类:
其他好文 时间:
2018-10-26 12:08:51
阅读次数:
353
title: 链接脚本与重定位 tags: ARM date: 2018 10 12 19:25:53 链接脚本与重定位 [TOC] 学习视频 "韦东山" 总结 1. 尽量使用一体式的链接脚本,方便简单,灵活 2. 学会使用链接脚本的值 3. bss段和comm段是需要我们手动去清除的 4. 位置无 ...
分类:
其他好文 时间:
2018-10-24 01:05:03
阅读次数:
497
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件) 4.连接阶段,将各个目标文件 ...
分类:
编程语言 时间:
2018-10-23 14:24:59
阅读次数:
180