原文发布时间为:2008-11-10 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><he…
Html CSS学习(五)position定位 position用来对元素进行定位,其值有以下几种: static:无特殊定位,对象遵循正常文档流,top,right,bottom,left等属性不会被应用. relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置. absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位.而其层叠通过z-index属性定义. fixe:对象脱离正常文档流…
https://github.com/onlyhom/mobileSelect.js/blob/master/docs/README-CN.md mobileSelect.js 一款多功能的移动端滚动选择器,支持单选到多选.支持多级级联.提供自定义回调函数.提供update函数二次渲染.重定位函数.兼容pc端拖拽等等.. [English documents] 特性 原生js移动端选择控件,不依赖任何库 可传入普通数组或者json数组 可根据传入的参数长度,自动渲染出对应的列数,支持单项到多项选…
百篇博客系列篇.本篇为: v55.xx 鸿蒙内核源码分析(重定位篇) | 与国际接轨的对外部发言人 | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 51.c.h.o v53.xx 鸿蒙内核源码分析(ELF解析篇) | 你要忘了她姐俩你就不是银 | 51.c.h.o v54.xx 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 51.c.h.o v55.xx 鸿蒙内核源码分析(重定位篇) | 与国际接…
第16-17章 - 基址重定位表&.reloc节区 @date: 2016/11/31 @author: dlive 0x00 前言 这几天忙着挖邮箱漏洞,吃火锅,马上要被关禁闭,看书进度比较慢... 0x01 PE重定位 若加载的是DLL.SYS文件,且在ImageBase位置处已经加载了其他DLL/SYS文件,那么PE装载器就会将其加载到其他未被占用的空间.这就涉及了PE文件重定位问题,PE重定位是指PE文件无法加载到ImageBase位置,而被加载到其他地址时发生的一系列处理行为. 开发工…
因为小可并非硬件编程出身,汇编基础又比较差...所以刚开始理解利用IOAPIC重定位技术的时候相当困难. 何为IOAPIC? 首先,必须认识到它是一个硬件,可编程的硬件.我理解的它在整个流程中的作用如图: 首先,必须创建一个新的中断项,也就是在IDT表中搜索到一个空闲的项,代码如下 P2C_U8 p2cGetIdleIdtVec() { P2C_U8 i; PP2C_IDTENTRY idt_addr = (PP2C_IDTENTRY)p2cGetIdt(); // 从vec20搜索到2a即可.…
ilocker:关注 Android 安全(新手) QQ: 2597294287 重定位就是把符号引用与符号定义链接起来的过程,这也是 android linker 的主要工作之一. 当程序中调用一个函数时,相关的 call 指令必须在执行期将控制流转到正确的目标地址.所以,so 文件中必须包含一些重定位相关的信息,linker 据此完成重定位的工作. 这些重定位信息保存在一系列的重定位项中,重定位项的结构如下: 这些重定位项位于 .rel.plt section 中. r_offset:对于可…
源代码如下: typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD TypeOffset[1]; } IMAGE_BASE_RELOCATION; typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION; 重定位表是一个数组,这个数组的大小记载在 _IMAGE_OPTIONAL_HEADER 的 .D…
今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为PE结构非常重要,再说做这个课件的确是很费神的事哈.在这里再次强调一下,只要是windows操作程序,其就要遵循PE格式,再说人家看雪的网址就是www.pediy.com. 简单的讲是可以,但是怕就怕有些朋友知识点遗漏了或者错误理解意思.不能深刻体会等,这样的效果是不好的~所以,小甲鱼尽管这系列视频可…
1 平台 转http://blog.csdn.net/misskissc/article/details/43063419 1.1 硬件 Table 1. 硬件(lscpu) Architecture: i686(Intel 80386) Byte Order: Little Endian 1.2 操作系统 Table 2. 操作系统类型 操作系统(cat /proc/version) 位数(uname -a) Linux version 3.2.0-4-686-pae i686(32bit)…
本文仅探讨s3c6410从nand flash启动u-boot时的代码重定位过程 参考: 1)<USER'S MANUAL-S3C6410X>第二章 MEMORY MAP 第八章 NAND FLASH CONTROLLER 2)u-boot源码: u-boot-x.x.x/board/samsumg/smdk6410/lowlevel_init.S u-boot-x.x.x/cpu/s3c64xx/start.S u-boot-x.x.x/cpu/s3c64xx/nand_cp.c 代码重定位…
add.c int data = 1;int bss;const int rodata = 1;int add(int num1, int num2){ int sum = 0; sum = num1 + num2; return sum;} 编译add.c成.o文件 gcc -c add.c(-c表示只编译不链接) file add.o输出结果如下: 此结果表明add.o是个重定位文件. 查看elf header可查看到更详细信息:readelf -h add.o 由于是重定位文件,ELF中并…
前面两篇 PE文件结构详解(四)PE导入表 和 PE文件结构详解(五)延迟导入表 介绍了PE文件中比较常用的两种导入方式,不知道大家有没有注意到,在调用导入函数时系统生成的代码是像下面这样的: 在这里,IE的iexplorer.exe导入了Kernel32.dll的GetCommandLineA函数,可以看到这是个间接call,00401004这个地址的内存里保存了目的地址, 根据图中显示的符号信息可知,00401004这个地址是存在于iexplorer.exe模块中的,实际上也就是一项IAT的…
eclipse 中项目svn 重定向 How to properly perform an SVN relocate on Zend for Eclipse 在eclipse中项目的svn 重定位(relocate),可以通过svn switch --relocate 来代替重定位,由于提供的消息不叫少,它困难/不可能的告诉你发生了什么错误和如何避免它. eclipse svn资源管理器中 重定向 仓库地址 SVN Switch with relocate in Eclipse 在 SVN 资源…
1. 要不要学习汇编 可以只懂一点,工作中基本不用,一旦用就是出了大问题 ldr : load 读内存 ldr r0, [r1]  : r1里存放的是地址值, 去这个地址读取4字节的内容,存入r0 str : stroe 写内存 str r0, [r1]  : r1里存放的是地址值, 把r0里的4字节数据存入这个地址 所有的汇编.C程序也好,终极目标就是:读写某个地址 2. 程序为何要分为代码段.数据段.BSS段 程序的指令等是只读的,可以把它们归为一类,以便运行时可以放在ROM等设备上, 当然…
typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD TypeOffset[1]; } IMAGE_BASE_RELOCATION; typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION; VirtualAddress:页起始地址RVA. SizeOfBlock:表示该分组保存了几项重定位项. Ty…
在上一章中,将代码重定位到了SRAM中,但是这样的做法作用不大.正确的做法的是将代码重定位到更大的主存中,即DRAM.Tiny6410的DRAM控制寄存器最多只能支持两个同一类型的芯片.每个芯片最多可分配256MB的地址空间,所有的芯片在相同的端口共享所有的引脚,除了时钟启动信号和片选信号. 通过原理图 DRAM的地址为0x50000000 通过原理图可知SDRAM的使用的是K4X1G163PE-L(F)E/GC6.通过查看该芯片的数据手册可知道,如何启动SDRAM控制寄存器. SDRAM  初…
重定位代码 两个不同的地址概念: 对于程序而言,需要理解两个地址,一个是程序当前所处的地址,即程序运行时所处的当前地址.二是程序应该位于的运行地址,即编译程序时所指定的程序的链接地址.在Tiny6410中板子上电启动时只会从NAND Flash/MMC等启动设备中拷贝前8K的代码到SRAM中,然后跳转到SRAM中运行代码.那么问题就来了,如果我们的程序超过8K会出现什么问题呢?程序拷贝不完整运行当然出错.所以就需要我们在前8K的代码中实现将整个程序完整的拷贝到DRAM等其他更大的存储空间,然后在…
"标准库定义了4个IO对象,处理输入时使用命名为cin的istream类型对象,这个对象也成为标准输入.处理输出时使用命名为cout的ostream类型对象,这个对象也称为标准输出.标准库还定义了另外两个ostream对象,分别命名为cerr和clog.cerr对象又叫标准错误,通常用来输出警告和错误信息给程序的使用者,而clog对象用于产生程序执行的一般信息.一般情况下,系统将这些对象与执行窗口联系起来,这样,当我们从cin读入时,数据从执行程序的窗口读入,当写到cout.cerr.clog时…
什么是重定位: 重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你占用,你必须转移到别的地址,这就需要基址重定位.你可能会问,不是说过每个进程都有自己独立的虚拟地址空间吗?既然都是自己的,怎么会被占据呢?对于EXE应用程序来说,是这样的.但是动态链接库就不一样了,我们说过动态链接库都是寄居在别的应用程序的空间的,所以出现要载入的基地址被应用程序占据了或者被其它的DLL占据了,也是很正常的,这时它就不得不进行重定位了. 哪些数据需要重定位: :00401000 5…
PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先,我们先看一段代码,比如调用Printf函数,使用OD查看. 那么大家有没有想过这么一个问题,函数的字符串偏移是00407030位置,函数Call的地址是00401020的位置 但是如果模块首地址申请不到了,变为了00100000的位置,那么此时的偏移是不是都是错的了? 首先说下,一般重定位表格都是D…
在第七章<链接>中的静态链接有对符号进行重定位PC相对引用的处理,书上对应的还有公式,但不是很好理解.现做实验对公式进行理解(公式内容如有兴趣可以参考原文)…
动态链接下,无论时可执行文件还是共享对象,一旦对其他共享对象有依赖,也就是所有导入的符号时,那么代码或数据中就会有对于导入符号的引用.而在编译时期这些导入符号的确切地址时未知的.只有在运行期才能确定真正确切的地址 静态编译下,这些未知的地址会被编译器一一修正. 对于动态链接来说,共享文件有两种编译方式(gcc -shared 和 gcc -fPIC -shared) 如果不使用PIC模式编译,那么装载时肯定是要重定位的,而且时每个进程都有一个副本(相对比较占用内存) 如果使用PIC模式编译,将会…
目录 引入 环境配置 编译体验 入口查找 代码分析 board_init_f pie 内存分布分析 SP设置 board_init_f 重定位 代码段重定位实现 变量地址修改 参考 title: uboot2012(一)分析重定位 date: 2019/02/23 21:53:21 toc: true --- 引入 关于移植,搜索关键英文词语portting 移植简单的介绍在readme中,手册是它的使用帮助 代码仓库地址 02-uboot重定位加入自己的代码 环境配置 这里使用编译工具arm-…
PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思.  如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234.  如果Imagebase 变了成了0x300000, 那么修正之后就是 ImageBase + RVA = 0X300000+1234 = 0x301234. 首先我们知道.一个EXE文件.会调用很多DLL(PE) 有多个PE文件组成. exe文件启动的基址 (ImageBase) 是0x40000. 假设我…
作者:Tangerine@SAINTSEC 本系列的最后一篇 感谢各位看客的支持 感谢原作者的付出一直以来都有读者向笔者咨询教程系列问题,奈何该系列并非笔者所写[笔者仅为代发]且笔者功底薄弱,故无法解答,望见谅如有关于该系列教程的疑问建议联系论坛的原作者ID:Tangerine 0x00 got表.plt表与延迟绑定 在之前的章节中,我们无数次提到过got表和plt表这两个结构.这两个表有什么不同?为什么调用函数要经过这两个表?ret2dl-resolve与这些内容又有什么关系呢?本节我们将通过…
PE加载的过程 任何一个EXE程序会被分配4GB的内存空间,用户层处理低2G的内存,驱动处理高2G的内存. 1.双击EXE程序,操作系统开辟一个4GB的空间. 2.从ImageBase决定了加载后的基址,ImageSize决定了程序有多大. 3.然后加载DLL 大体流程: 1.PE被执行时,装载器为进程分配虚拟地址空间,在此情况下,并不是把完整的PE文件载入到磁盘中,而是做一个简单的内存映射. 2.PE装载器在内核中创建进程对象和主进程对象以及其他的内容. 3.PE装载器搜索输入表,装载应用程序…
可重定位目标文件 ELF文件 ELF头以一个16字节的序列开始,这个序列描述了生成该文件的系统的字的大小和字节顺序.ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息.其中包括ELF头的大小.目标文件类型.机器类型.节头部表的文件偏移,以及节头部表中的条目大小和数量. 夹在ELF头和节头部表之间的都是节.一个典型的ELF目标文件包括: .text 已编译程序的机器代码 .rodata 只读数据 .data 已初始化的全局C变量 .bss 未初始化的全局C变量.在目标文件中这个节不占据实…
一.重定位 1.以前版本的重定位 2.新版本 我们的程序不只涉及一个变量和函数,我们若想访问程序里面的地址,则必须使用SDRAM处的新地址,即我们的程序里面的变量和函数必须修改地址.我们要修改地址,则必须知道程序的地址,就需要在链接的时候加上PIE选项: 加上PIE选项后,链接时候的地址就会生成,然后存储在段里面,如下段(u-boot.lds): 然后我们根据这些地址的信息来修改代码,程序就可以复制到SDRAM的任何地方去. 二.代码流程 start.S中执行到了 bl _main,跳转到_ma…
0x01  重定位表结构   重定位表是由数据目录表中的第六个成员指出的: typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;  程序编译时每个模块有一个优先加载地址ImageBase,这个值是链接器给出的,因此链接器生成的指令中的地址是在假设模块被加载到ImageBase前提之下生成的,那么一旦程序没有将模…