链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可重定位的目标文件a.o 最终完全链接成可执行文件a.out 目标文件 目标文件有三种形式: 可重定位 ...
分类:
系统相关 时间:
2016-04-10 21:29:33
阅读次数:
227
前面的Shellcode中,我使用的都是自己XP机器上的硬编码地址。任何时候在Shellcode中使用硬编码地址都不是个好主意,这一点与动态库的重定位类似,一旦系统环境和程序编译设置发生变化,Shellcode几乎肯定会失效。因此,我们要找到更好一点的方法。前面的Shellcode中,我用到了如下几个硬编码地址,它们的含义如下:
其中,LoadLibraryA的作用比较特殊,我们用它来加载us...
分类:
其他好文 时间:
2016-04-10 14:49:47
阅读次数:
183
第七章——链接 1、链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载到存储器并执行。 2、链接可以执行于编译时,加载时,运行时。 7.1编译器驱动程序 1、大多数编译系统提供编译驱动程序,它代表用户在需要时调用语言预处理器、编译器、汇编器和链接器。 7.2 静态链接 ...
分类:
系统相关 时间:
2016-04-09 19:06:36
阅读次数:
303
第七周、可执行程序的装载 一、可执行程序是如何产生的? (1).c文件gcc汇编形成.s和.asm汇编代码; (2)汇编代码经过gas变成.o目标文件; (3)目标文件变成可执行文件; (4)可执行文件loader之后存储。 二、目标文件格式ELF (1)可重定位文件(用来和其他object文件一起 ...
分类:
系统相关 时间:
2016-04-08 21:52:19
阅读次数:
303
exec*函数对应的系统调用会加载可执行程序到内存进行执行。本文将分析可执行程序加载的过程,包括可执行程序的个是ELF,动态链接以及静态链接相关内容,并通过gdb调试的方式展示该系统调用的执行过程。 ...
分类:
其他好文 时间:
2016-04-08 18:19:13
阅读次数:
126
可执行程序的装载 作者 黎静+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 可执行程序是怎么来的 目标文件的格式ELF 静态链接的ELF可执行文件和进程的地址空间 程序的入口 :Ent ...
分类:
系统相关 时间:
2016-04-08 00:44:37
阅读次数:
135
20135336 王维臻 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一、学习内容 (一)预处理、编译、链接和目标文件的格式 1.可执行程序是怎么得来的 2.目标文件的格式ELF 3.静态链接的ELF可执行文件和 ...
分类:
系统相关 时间:
2016-04-07 13:22:04
阅读次数:
305
在第七章链接中,链接可以在编译时由经他编译器完成,也可以在加载时和运行时由动态链接器来完成。链接器处理可以为目标文件的二进制文件,它有三种不同的形式:可重定位和可执行和共享的。 链接器的两个主要的任务是符号解析和重定位,符号解析将文件中的每个全局符号都绑定到一个唯一的定义,而重新定位确定每个符号的最 ...
分类:
其他好文 时间:
2016-04-07 13:18:53
阅读次数:
164
一.几个重要的基本概念 链接:链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可以被加载到存储器中并执行。 编译器驱动程序:编译的过程可以分为以下几个步骤:1.语言预处理器 2.编译器 3.汇编器 4.链接器 静态链接:以一组可重定位目标文件和命令行参数作为输入,生成一个完全 ...
分类:
其他好文 时间:
2016-04-07 01:28:43
阅读次数:
177
需要搞明白的是,linux系统上执行./a.out运行,其实并不是运行的a.out这个elf文件。内核对于要运行的elf文件会调用load_elf_binary进行解析,首先是根据elf文件的header信息获取它需要的解释器,然后加载需要运行的各个段到内存中,把控制权交给解释器,解释器会加载该程序需要动态链接库(静态链接就不运行解释器),最后解释器将控制权交给内存中的程序入口,程序运行。...
分类:
系统相关 时间:
2016-04-06 23:37:01
阅读次数:
559