可执行文件分析
- 格式:pdf
- 大小:948.33 KB
- 文档页数:9
exe原理
exe(可执行文件)是一种计算机程序文件的格式,用于在Windows操作系统上运行程序。
exe文件是一种二进制文件,
包含了计算机程序的所有指令和数据。
下面将解释exe文件的
工作原理。
首先,exe文件由编程语言(如C++、C#等)编写的源代码通
过编译器转换成机器语言指令。
编译器会将源代码转换为机器语言的目标文件。
接下来,链接器将目标文件与所需的库文件进行链接,生成最终的可执行文件。
在链接过程中,链接器会解析程序中的函数调用和跳转指令,将其与库文件中对应的函数进行关联。
生成的可执行文件包含了程序的所有指令和数据。
当用户双击exe文件或通过命令行运行时,操作系统会将其加载到内存中,并创建进程来执行该程序。
执行过程中,操作系统会按照程序指令的顺序逐条执行,从而实现程序的功能。
程序可以读取输入数据、进行计算、调用其他函数等。
通过分析exe文件中的指令和数据,操作系统可以知道如何加载、执行和卸载程序。
此外,操作系统还提供了一些系统调用供程序使用,用于访问硬件设备、文件系统、网络等资源。
总而言之,exe文件是一种包含了程序所有指令和数据的二进
制文件,通过编译、链接和加载等过程使程序能够在计算机上运行。
操作系统负责将exe文件加载到内存中,并按照指令的顺序执行,实现程序的功能。
⼀、C:\Windows下的可执⾏⽂件 accstat.exe windows 辅助状态指⽰器 arp.exe tcp/ip地址转换协议命令 calc.exe 计算器应⽤软件 cdplayer.exe cd播放器附件 cleanmgr.exe 磁盘清理程序 clipbrd.exe 剪贴板查看应⽤程序 ms-dos⽅式 control.exe 控制⾯板应⽤程序 cvt1.exe fat32转换器 defrag.exe 磁盘碎⽚整理应⽤程序 drvspace.exe 磁盘空间管理应⽤程序 dialer.exe 电话拨号程序 directcc.exe 直接电缆连接 explorer.exe 资源管理器 extrac32.exe windows cab ⽂件解压缩应⽤程序 fontview.exe 字体查看程序 filexfer.exe microsoft⽂件传输应⽤程序 finger.exe ⽤于获得来⾃于运⾏标准finger服务的任何系统的⽤户信息 freecell.exe 空当接龙游戏 grpconv.exe 程序组转换器 hostname.exe 返回tcp/ip配置窗⼝的dns标题头窗⼝中定义的计算机名字 ipconfig.exe 快速浏览系统tcp/ip配置应⽤程序 kodakprv.exe 映像预览应⽤程序 mplayer.exe 媒体播放机 mshearts.exe 红⼼⼤战游戏 nbtstat.exe 显⽰tcp/ip上的netbios(netbt)的状态 net.exe ⼀个⾮常全的络配置、显⽰络信息的命令,有详细帮助 netstat.exe ⽤于检查所有tcp、ip以及udp连接的统计情况 netdde.exe windows 络dde(动态数据交换) netwatch.exe 络监视器 notepad.exe 记事本应⽤程序 packager.exe 对象包装应⽤程序 pbrush.exe 画笔应⽤程序 ping.exe 检测络远端主机是否存在及判断络是否正常的检测⼯具 progman.exe windows3.x中的程序管理器 qfecheck.exe 更新信息⼯具 regedit.exe 注册表编辑器 route.exe ⽤于管理本地tcp/ip路由表的应⽤程序 rsrcmtk.exe 显⽰资源状况 rundll32.exe 将dll作为应⽤程序运⾏ scandskw.exe 磁盘扫描应⽤程序 smartdrv.exe smartdrive(dos磁盘缓冲器)应⽤程序 sigverif.exe microsoft 签字应⽤程序 sndrec32.exe 录⾳机附件 sndvol32.exe ⾳量控制 sol.exe 纸牌游戏 sysmon.exe 系统监视器 taskman.exe 任务执⾏栏应⽤程序 taskmon.exe 任务监视器应⽤程序 telnet.exe 虚拟终端程序 tftp.exe ⼩⽂件传送协议,允许将⽂件传送给tftp服务器 tracert.exe 决定⽤户的系统与⽬标系统之间的路径 tuneup.exe windows 调整向导 vcmui.exe 版本冲突管理器 wangimg.exe 映像应⽤程序 welcome.exe 欢迎光临widows实⽤程序 winfile.exe windows3.x中的⽂件管理器 winhelp.exe 16位的windows 帮助程序 winhlp32.exe 32位的windows 帮助程序 wininit.exe windows 安装初始化应⽤程序 winipcfg.exe tcp/ip 配置实⽤程序 winmine.exe 扫雷游戏 winpopup.exe windows 弹出式消息实⽤程序 winver.exe 显⽰windows 版本号 write.exe 写字板附件 winrep.exe windows 报告⼯具 winalign.exe 排列本地⽂件应⽤程序 wupdmgr.exe windows 更新⼯具。
Java Card CAP文件分析JAVA卡的可执行文件(CAP 文件)是编译多个应用程序(Applet)的生成结果,包含了一个包中定义的所有类和接口,与包之间是一一对应的关系。
实际发卡操作时,首先需要将该可执行文件下载至卡片中,并安装需要的应用实例;用户使用该安装的应用实例执行操作功能。
CAP文件包含12个组件:注意:一个完整的CAP文件,除COMPONET_Applet、COMPONET_Export 和COMPONET_Debug组件是可选外,其他均为必选。
每个组件封装成一个CAP包,包含在Jar包中。
最后在卡上只保留了5个组件:COMPONET_Method,COMPONET_Class,COMPONET_ConstantPool,COMPONET_StaticField和COMPONET_Export。
其余的组件只是安装时提取有用信息而不在卡中保存。
12个组件中,类class组件保存本应用声明的所有类和接口的信息;方法method 组件保存本应用声明的所有方法和接口,method中利用2字节索引index引用类、方法和域;常数池constant pool组件保存method组件引用的所有类、方法和域信息,分为类、实例域、虚方法、父方法、静态域和静态方法6类,每组信息为4个字节;相关地址reference location组件保存method组件中索引的偏移。
对于Java Card而言,应用程序的下载过程是即CAP文件写入到EEPROM的过程,即是对CAP文件的下载过程。
在CAP文件的下载过程中,需要将一部分组件进行解析,同时对reference location中指定的位置进行链接,能够链接到method 组件中的一个索引号,并根据索引号查找constant pool中保存的、与该索引号对应的类、方法或域在EEPROM中的实际地址,调用实际地址中存储的数据。
也就是说,方法的调用其实是需要两个步骤来实现的:1.根据reference location中指定的位置进行链接,获取method组件中的索引号;2.根据索引号查找constant pool中保存的、与该索引号对应的类、方法或域在EEPROM中的实际地址,调用实际地址中存储的数据。
文件执行情况报告一、引言文件执行情况报告是对文件执行过程中的情况进行总结和分析的一份文档,旨在评估文件的执行效果,发现问题并提出改进措施。
本报告将对文件执行过程中的关键步骤、问题和解决方案进行详细分析和总结。
二、文件执行过程1. 文件准备阶段在文件执行之前,需要对文件进行准备工作。
这包括确定文件的目标和目的,明确文件的范围和内容,收集必要的信息和数据,并进行相关的调研和分析。
2. 文件编制阶段文件编制是整个文件执行过程中的核心环节。
在文件编制阶段,需要根据文件的目标和目的,制定合理的文件结构和内容,确保文件的逻辑性和可读性。
3. 文件审核阶段文件审核是为了确保文件的质量和准确性。
在文件审核阶段,需要对文件的内容、格式、语法等进行仔细检查,发现并修正其中的错误和问题。
4. 文件发布阶段文件发布是将文件正式提供给目标读者的过程。
在文件发布阶段,需要选择合适的发布方式,确保文件能够被目标读者及时获取和使用。
三、文件执行情况分析1. 文件目标和目的在文件执行过程中,首先需要对文件的目标和目的进行明确和详细的说明。
只有清楚地了解文件的目标和目的,才能制定合适的执行策略和措施。
2. 文件内容和结构文件的内容和结构是影响文件执行效果的重要因素。
在文件编制阶段,应根据目标读者的需求和习惯,合理划分文件的章节和段落,确保文件的逻辑性和连贯性。
3. 文件质量和准确性文件的质量和准确性对于文件执行的效果至关重要。
在文件审核阶段,应仔细检查文件的格式、语法和逻辑,确保文件中的信息准确无误。
4. 文件发布方式和渠道文件的发布方式和渠道直接影响文件的传播和使用效果。
在文件发布阶段,应选择合适的发布方式,确保文件能够被目标读者及时获取和使用。
四、文件执行问题及解决方案1. 目标和目的不明确问题:文件执行过程中,目标和目的不明确导致文件内容和结构混乱,无法达到预期效果。
解决方案:在文件执行前,明确文件的目标和目的,并将其详细记录和传达给相关人员,确保文件编制和执行的一致性。
解析ELF可执⾏⽂件-C语⾔解析代码/* gcc elfparse.c -o elsparse */#include <stdio.h>#include <string.h>#include <errno.h>#include <elf.h>#include <unistd.h>#include <stdlib.h>#include <sys/mman.h>#include <stdint.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, char **argv) {int fd, i;uint8_t *mem;struct stat st;char *StringTable, *interp;Elf64_Ehdr *ehdr;Elf64_Shdr *shdr;Elf64_Phdr *phdr;if (argc < 2) {printf("Usage: %s <executable>\n", argv[0]);exit(0);}if ((fd = open(argv[1], O_RDONLY)) < 0) {perror("open");exit(-1);}if (fstat(fd, &st) < 0) {perror("fstat");exit(-1);}/*** 使⽤mmap函数将可执⾏⽂件映射到内存中** NULL: 由系统决定映射区的起始地址** st.st_size: 映射区的⼤⼩** PROT_READ: 映射区的保护标志** MAP_PRIVATE: 建⽴⼀个写时拷贝的私有映射** fd: ⽂件描述符** 0: 将从此偏移处的⽂件位置开始读取*/mem = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);if (mem == MAP_FAILED) {perror("mmap");exit(-1);}/* 若上述步骤成功执⾏,则此时mem就是可执⾏⽂件映射的起始位置 *//* 获取⽂件头 */ehdr = (Elf64_Ehdr *) mem;/* 获取段表 */phdr = (Elf64_Phdr *) (&mem[ehdr->e_phoff]);/* 获取节表 */shdr = (Elf64_Shdr *) (&mem[ehdr->e_shoff]);/* 检查该⽂件是否为ELF映像 */if (mem[0] != 0x7f || strncmp(&mem[1], "ELF", 3)) {fprintf(stderr, "%s is not an ELF file\n", argv[1]);exit(-1);}/* 确保为可执⾏⽂件 */if (ehdr->e_type != ET_EXEC) {fprintf(stderr, "%s is not an executable\n", argv[1]);exit(-1);}printf("ELF header:\n\n");printf("%-36s 0x%x\n", " Program Entry point:", ehdr->e_entry);printf("%-36s %d (bytes)\n", " Size of program header:", ehdr->e_phentsize);printf("%-36s %d\n", " Number of Program headers:", ehdr->e_phnum);printf("%-36s %d (bytes)\n", " Size of section header:", ehdr->e_shentsize);printf("%-36s %d\n", " Number of Section headers:", ehdr->e_shnum);printf("%-36s %d\n\n", " Section header string table index:", ehdr->e_shstrndx);/* 存储节名的字符串表 */StringTable = &mem[shdr[ehdr->e_shstrndx].sh_offset];printf("Section header list: \n\n");for (i = 1; i < ehdr->e_shnum; i++)printf("%-26s 0x%x\n", &StringTable[shdr[i].sh_name], shdr[i].sh_addr);printf("\n Program header list: \n\n");for (i = 0; i < ehdr->e_phnum; i++) {switch (phdr[i].p_type) {case PT_LOAD:/* ⼀般PT_LOAD类型的段有代码段和数据段,可执⾏的为代码段 */if (phdr[i].p_flags & PF_X)printf("Text segment: 0x%x\n", phdr[i].p_vaddr);elseprintf("Data segment: 0x%x\n", phdr[i].p_vaddr);break;case PT_INTERP:/* 程序解释器的位置,例如 ld-linux.so.2 */interp = strdup((char *)&mem[phdr[i].p_offset]);printf("Interpreter: %s\n", interp);break;case PT_NOTE:printf("Note segment: 0x%x\n", phdr[i].p_vaddr);break;case PT_DYNAMIC:printf("Dynamic segment: 0x%x\n", phdr[i].p_vaddr);break;case PT_PHDR:printf("Phdr segment: 0x%x\n", phdr[i].p_vaddr);break;}}free(interp);exit(0);}测试⽤例// gcc -no-pie example.c -o example#include <stdio.h>void foo() {printf("this is function foo\n");}void your_name(char *filename) {printf("your filename is %s\n", filename);}int main(int argc, char **argv) {foo();your_name(argv[0]);}注意使⽤如下命令来⽣成ELF可执⾏⽂件,若没有加-no-pie参数⽣成的是共享⽬标⽂件gcc -no-pie -example.c -o example结果./elfparse example参考资料《Linux⼆进制分析》 - Ryan O’Neill。
PowerPC上ELF可执行文件的符号解析(一)一.前言符号解析是Linux系统导入二进制可执行文件的重要过程,它完成的工作包括将一个符号定位到实际的内存位置,并且要保证可以正确引用这些符号。
按解析对象的不同它可以分为变量符号解析和函数符号解析;按解析方式的不同可以分为静态解析和动态解析。
对于静态解析的符号,它们的位置在文件生成时就由link editor(在Linux下通常是ld)已经确定下来了;对于动态解析的符号,他们的位置在程序运行时才由dynamic linker(动态链接器,32位Linux平台下通常是/lib/ld.so.1)确定下来。
我们可以这么认为,如果一个符号在共享库中定义,那么当其他可执行文件或共享库引用这个符号时,就需要对它作动态解析。
变量符号的动态解析过程比较简单,系统在载入程序过程中将变量symbol位置存入到GOT (Global Offset Table)中,引用变量symbol时首先计算出GOT表的实际位置,然后以它作为基址加上(变量symbol在GOT表中的偏移量)就可以从GOT表中取得该symbol的实际位置。
下面以SUSE Linux Enterprise Server 8.1 for IBM pSeries为例,主要讲述和演示32位PowerPC Linux下函数符号的动态解析过程。
二.概念在讲述解析过程之前,先介绍一下在解析过程中要用到的基本概念。
1.ELF(Executable and Linkable Format)文件ELF是Linux缺省采用的可执行文件(包括共享库,object文件)的格式,具体规范参见参考文献[1]、[2]。
这里需要提一下的是section这个概念:section是ELF文件中一段互相了解信息,它可以是一段数据,也可以是一段代码。
比如可执行代码信息就放在.text section 中,被用户初始化的变量会放在.data section中,没有被用户初始化的变量会放在.bss section(bss是below stack segment的缩写)中。
可执行文件的名词解释可执行文件是一种特殊类型的计算机文件,也被称为二进制文件或者程序文件。
它是由计算机程序编译生成的二进制代码,可以直接在计算机上运行。
在计算机科学领域,可执行文件是一种包含了机器指令集的文件,这些指令集可以被计算机直接执行。
本文将对可执行文件进行详细解释,并介绍它的结构和功能。
1. 可执行文件的结构可执行文件的结构可以分为两个主要部分:文件头和程序代码。
文件头通常包含了一些与文件相关的元数据,例如文件的版本号、入口点位置等等。
程序代码部分则包含了计算机所需的二进制指令集,这些指令可以被计算机硬件直接执行。
2. 可执行文件的生成与编译在软件开发的过程中,程序员通常会编写高级编程语言(如C、C++、Java)的源代码。
为了能够让计算机执行这些源代码,需要将其编译成可执行文件。
编译器是一种专门用于将高级语言代码转换成机器代码的工具。
编译过程将源代码转化为目标文件,并最终链接生成可执行文件。
3. 可执行文件的阅读与修改一般情况下,可执行文件是以二进制形式存储在计算机硬盘上的。
为了读取和修改可执行文件,需要使用一些特殊的工具和技术。
常见的工具包括反汇编器和调试器。
反汇编器可以将二进制指令转换为人类可读的汇编代码,从而帮助程序员理解和分析可执行文件的功能。
调试器则可以在运行时对可执行文件进行调试和修改,用于查找和修复程序中的错误。
4. 可执行文件的运行与操作系统可执行文件的运行需要依赖操作系统。
操作系统负责将可执行文件加载到内存中,并执行其中的二进制指令。
在加载过程中,操作系统会为可执行文件分配一块内存空间,并将代码和相关数据加载到其中。
一旦加载完成,操作系统会将控制权交给可执行文件,使其开始执行。
操作系统还提供了一些系统调用接口,使得可执行文件能够与硬件和其他软件进行交互。
5. 可执行文件的应用与安全性可执行文件的应用非常广泛,涉及到各行各业的计算机软件。
例如办公软件、娱乐应用、操作系统等都是以可执行文件的形式提供给用户。
ELF文件格式分析ELF(Executable and Linkable Format)是一种常见的可执行文件格式,用于在UNIX和类UNIX系统上存储和执行程序。
在本文中,我们将详细分析ELF文件格式的结构和各个部分的作用。
首先是标识部分,它占据ELF文件的最开始位置,有以下几个字段:1. Magic Number:ELF文件的前四个字节,用于识别文件类型。
对于32位系统,它的值是0x7F、'E'、'L'和'F';对于64位系统,它的值是0x7F、'E'、'L'和'F'以及0x022.类型:指定了ELF文件的类型,比如可执行文件、目标文件、共享库等等。
3.类型机器:指定了目标机器的体系结构,如x86、ARM等等。
4.版本:指定了ELF文件的版本号。
5.入口点:对于可执行文件,指定程序的入口点。
6.程序头表和节头表的偏移地址和大小。
接下来是文件头部分,它描述了ELF文件的整体结构和布局:1.类型:表示ELF文件的类型,如可重定位文件、可执行文件、共享目标文件等。
2.目标机器:标识目标机器的类型。
3.版本:指定了ELF文件的版本号。
4.入口点:指定程序的入口点。
5.程序头表偏移地址和节头表偏移地址。
6.程序头表项的大小、数量和节头表项的大小、数量。
7.字符串表索引,用于找到文件中的字符串。
最后是节头表部分,它包含了所有节(Section)的相关信息,比如代码段、数据段等等。
每个节头表项包含以下字段:1.节的名称:用于标识节的名称。
2.节的类型:描述节的属性,如代码段、数据段、符号表等。
3.节的标志:描述节的属性,如可写、可执行等。
4.节的虚拟地址:指定节在内存中的虚拟地址。
5.节的文件偏移地址:指定节在文件中的偏移地址。
6.节的大小:指定节的大小。
7.链接和信息:用于指定其他与节相关的信息。
通过分析ELF文件的结构,我们可以获得有关程序入口点、机器类型、节的信息等重要的元数据。
可执⾏⽂件格式总结⼀、HexHex⽂件,⼀般是指Intel标准的⼗六进制⽂件。
Intel Hex ⽂件常⽤来保存单⽚机或其他处理器的⽬标程序代码。
它保存物理程序存储区中的⽬标代码映象。
⼀般编程器均⽀持⽣成此种格式⽂件。
如,Keil下可通过配置相关选项来⽣成Hex⽬标⽂件。
Hex⽂件由记录(RECORD)组成。
在Hex⽂件⾥⾯,每⼀⾏代表⼀个记录。
形如 :BBAAAATTHHHH...HHHHCCBB : 字节个数。
AAAA: 数据记录的开始地址,⾼位在前,低位在后。
TT : Type00 数据记录,⽤来记录数据。
01 记录结束,放在⽂件末尾,⽤来标识⽂件结束。
02 ⽤来标识扩展段地址的记录04 扩展地址记录(表⽰32位地址的前缀)HHHH:⼀个字(Word)的数据记录,⾼字节在前,低字节在后。
TT之后共有BB/2 个字的数据。
CC : 占据⼀个Byte的CheckSum举例分析::020*********FA:10000400FF00A0E314209FE5001092E5011092E5A3:00000001FF第1条记录:长度为0x02,Load offset为0000,Type为04,说明该记录为扩展段地址记录。
数据为0000,校验和为FA。
第2条记录:长度为0x10(16),Load offset为0004,Type为00,说明该记录为数据记录。
数据为FF00A0E314209FE5001092E5011092E5,共16个字节,记录的校验和为A3。
第3条记录:长度为00,Load offset为0000,Type= 01,校验和为FF。
类型为01,说明这个是⼀个END OF FILE RECORD,标识⽂件的结尾。
Hex结束符⼀般以:00000001FF结尾。
从这个记录的长度和数据,我们可以计算出基地址为0x0000。
后⾯的数据记录都以此地址为基地址。
第2条记录此时的基地址为0x0000,加上OFFSET,这个记录⾥的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004. 其实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5。
Windows可执行文件简述
Windows下的可执行文件有四种:.COM .MZ .LE .NE .PE
.PE格式
16位的程序是不健壮的,因此为了保证Windows的健壮性,Microsoft在Microsoft Windows NT 3.1及其以后的操作系统版本,也就是所有的基于Win32的操作系统中推出了一种新的可执行文件的格式,也就是PE文件格式。
PE的意思就是Portable Executable(可移植的可执行文件),内含32位程序代码和数据,是UNIX Common Object File Format(COFF)的演化。
PE格式比其它格式优越的关键点在于它有依字母次序排列的Exports,以及一个可以直接将程序影像映像成虚拟内存的内存文件映射功能。
与此同时,Microsoft也推出了新的obj文件和lib文件的格式。
从PE开始,可执行文件的结构开始有了正式的文档化。
Microsoft在Visual C++ 6的联机文档(即《MSDN Library Visual Studio 6.0》)中给出了以C语言描述的PE结构,这给开发者提供了很大的方便。
同时还在VC的Include目录里的WINNT.h文件中提供PE的各结构的定义,提供了PE文件中使用的原始数据结构。
exe原理在计算机领域中,exe(可执行文件)是一种常见的文件格式,它包含了计算机程序的可执行代码。
exe文件通常由程序员编写并通过编译器生成,用户可以通过双击exe文件来运行相应的程序。
在本文中,我们将介绍exe文件的原理及其相关知识。
首先,exe文件是由机器语言指令组成的,这些指令是由程序员编写的源代码经过编译器编译而成。
编译器将源代码翻译成机器语言指令,然后将这些指令以二进制形式存储在exe文件中。
当用户双击exe文件时,操作系统会加载这些指令并按照其顺序执行,从而运行相应的程序。
其次,exe文件还包含了程序的其他一些信息,比如程序入口点、数据段、代码段等。
程序入口点指示了程序在何处开始执行,数据段存储了程序中使用的全局变量和静态变量,而代码段则存储了程序的实际代码。
这些信息使得操作系统能够正确地加载和执行程序。
此外,exe文件还可能包含一些附加信息,比如程序的图标、版本号、版权信息等。
这些信息可以让用户更容易地识别和了解程序,也有助于程序的管理和维护。
总的来说,exe文件是一种包含了程序可执行代码的文件格式,它是计算机程序运行的基础。
通过编译器将源代码编译成机器语言指令,并将这些指令以二进制形式存储在exe文件中,用户可以通过双击exe文件来运行相应的程序。
exe文件还包含了程序的其他一些信息,比如程序入口点、数据段、代码段等,以及一些附加信息,比如程序的图标、版本号、版权信息等。
这些信息使得操作系统能够正确地加载和执行程序,也有助于用户识别和了解程序。
希望本文能够帮助读者更好地理解exe文件的原理及其相关知识。
PowerPC上ELF可执行文件的符号解析(二)一.概念在上一篇文章中介绍了符号解析的基本概念,象PLT表、Symbol表、Relocation表等,这些概念在64位环境仍然存在,但PLT表的意义在64位环境下发生了变化。
在讲解64位环境下PowerPC符号解析的过程之前,先说64位和32位环境在汇编语言这个层次上的两个不同之处。
1.TOC(Table of Contents)我们知道在32位环境下GOT表的地址是必须在汇编程序中计算出来的,具体的计算方法读者有兴趣可以自己写一个简单的程序,然后用gcc -fPIC -S来编译后察看汇编代码即可。
64位环境下PowerPC引入了一个新的概念:TOC。
它是可执行文件和共享库的一段数据,包括.got、.toc和small data area(用来存放local的小于指定大小的数据),最大可以有64K 字节。
PowerPC 64 ABI规定了寄存器r2专门用来存放TOC基址,通常是(TOC的起始地址+0x8000)。
一般而言,TOC中各个section的顺序是.gotàtocàsmall data area,所以TOC的起始地址就等于.got的地址。
2.函数描述符(Function Descriptor)64位和32位一个很大的不同点就是函数描述符的引入。
一个函数描述符是三个双字组成的结构:第一个双字是该函数的真正入口点第二个双字是该函数的TOC基址第三个双字是为其他语言,比如Pascal和PL/1准备的环境指针在64位环境下,和函数名相同的symbol名是函数描述符的地址,函数入口点symbol名是函数名前面加个点。
比如我们定义了一个函数void Func(),那么用汇编表示,Func是它的函数描述符,.Func是它的函数入口点。
二.变量符号动态解析过程变量符号的动态解析过程和32位的情况相比没有太多的变化,系统在载入程序过程中将变量symbol地址存入到TOC中,当需要引用变量symbol时就赋该变量所属的TOC基址到r2中,以r2作为基址加上(变量symbol在TOC中的偏移量)就可以从TOC中取得该symbol的实际地址。
基于ELF的DXE可执行文件的研究和分析
彭波;王毅
【期刊名称】《湘南学院学报》
【年(卷),期】2006(027)005
【摘要】对ELF(Executable and Linkable Format)文件格式作了简单介绍,对基于ELF的DXE可执行文件作了比较和分析.介绍了一些调试信息提取的方法,并对其进行了分析和探讨.
【总页数】4页(P81-84)
【作者】彭波;王毅
【作者单位】浙江商业职业技术学院,浙江,杭州,310053;湘潭大学,信息工程学院,湖南,湘潭,411105
【正文语种】中文
【中图分类】TP313
【相关文献】
1.基于PE可执行文件的软件水印研究 [J], 黄强波;唐倩;刘新桥
2.基于可执行文件静态分析的入侵检测模型 [J], 苏璞睿;杨轶
3.基于免疫原理的可执行文件签名验证模型的研究 [J], 李媛圆;吴灏;张涛;林东贵
4.基于windows可执行文件的免疫系统研究 [J], 周淑静;马银华
5.基于PE融合原理的Wimdows可执行文件加壳方法研究 [J], 赵北庚
因版权原因,仅展示原文概要,查看原文内容请购买。
可执行文件的名词解释是可执行文件是一种计算机文件,用于在计算机上执行特定的操作或运行程序。
它是计算机编程中至关重要的一环,对于软件开发和系统管理都具有重要意义。
在这篇文章中,我们将深入探讨可执行文件的定义、构成以及其在计算机领域中的广泛应用。
什么是可执行文件?可执行文件,简称“EXE”文件,是计算机中包含二进制机器代码的文件类型。
它包含了计算机指令的二进制表示形式,可被操作系统直接执行。
与源代码文件不同,可执行文件不可读,因为它以一种计算机可识别的格式存储程序代码。
可执行文件构成的过程可执行文件的构成过程是将源代码文件转换为机器语言代码的过程,也就是编译。
编译过程涉及将源代码文件转换为汇编语言文件,然后再将汇编语言文件转换为可执行文件。
汇编语言是一种与机器指令相对应的人类可读的编程语言。
汇编语言文件是使用特定的汇编器将汇编代码转换为可执行文件的二进制机器代码的文件。
转换为可执行文件的最后一步是链接器,它将各个汇编语言文件(或其他可执行文件)的片段连接在一起,形成单个的可执行文件。
这个链接过程还包括将程序所需的库文件和其他依赖项链接到可执行文件中,以确保程序正常运行。
可执行文件的应用可执行文件广泛应用于各个领域。
在软件开发领域,程序员将源代码编译为可执行文件,然后分发给用户使用。
用户只需执行这些可执行文件,而无需拥有源代码或编程知识,即可运行程序。
可执行文件也是操作系统的核心组成部分。
它们包括操作系统内核和其他系统程序,用于控制计算机硬件和提供各种功能,如文件管理、网络通信和安全性等。
操作系统启动时,会加载一个主要的可执行文件来启动计算机。
此外,可执行文件还用于实施恶意行为,如病毒和恶意软件。
恶意程序将自身伪装成看似无害的可执行文件,以便用户执行,并在用户不知情的情况下对系统进行非法操作。
因此,在安装和执行可执行文件时,我们应保持警惕,并使用防病毒软件等工具来保护计算机的安全。
结论可执行文件是计算机编程中不可或缺的一环。
运行可执行文件的运行规则1. 什么是可执行文件?可执行文件是一种计算机文件,它包含了一系列的机器指令,可以直接被计算机系统执行。
在操作系统中,可执行文件通常具有特定的格式和扩展名。
2. 可执行文件的运行规则当我们想要运行一个可执行文件时,需要遵循一定的运行规则。
下面是一些常见的运行规则:2.1 操作系统兼容性不同的操作系统有不同的可执行文件格式和运行方式。
例如,Windows系统使用PE (Portable Executable)格式,而Linux系统使用ELF(Executable andLinkable Format)格式。
因此,在选择一个可执行文件时,需要确保其与当前操作系统兼容。
2.2 文件权限在运行一个可执行文件之前,需要确保该文件具有足够的权限。
在Unix-like操作系统中,可以使用chmod命令来修改文件权限。
通常情况下,只有具备”可执行”权限(即x权限)的用户才能够运行一个可执行文件。
2.3 环境变量在运行一个可执行文件之前,需要确保所需的环境变量已经设置好。
环境变量是一些用于存储系统配置信息和程序所需数据的变量。
常见的环境变量包括PATH、LD_LIBRARY_PATH等。
在Unix-like操作系统中,可以使用export命令来设置环境变量。
2.4 命令行参数可执行文件通常可以接受一些命令行参数,用于控制其运行行为。
这些参数可以是选项(如”-h”表示显示帮助信息)或者参数值(如”-f filename”表示指定一个文件名)。
在运行一个可执行文件时,可以在命令行中通过空格分隔的方式来传递这些参数。
2.5 运行时错误处理在运行一个可执行文件时,可能会出现各种错误。
例如,文件不存在、权限不足、内存不足等。
为了处理这些错误,程序需要具备相应的错误处理机制。
通常情况下,程序会返回一个非零的退出状态码来表示出错,并输出相应的错误信息。
3. 运行可执行文件的步骤一般情况下,运行一个可执行文件需要经过以下几个步骤:3.1 加载操作系统会将可执行文件从存储设备加载到内存中。
Linux命令高级技巧使用objdump和readelf查看可执行文件信息在Linux系统中,objdump和readelf是两个常用的命令,用于查看可执行文件(二进制文件)的详细信息。
通过使用这两个命令,我们可以深入了解可执行文件的结构、函数、符号表等相关信息,有助于我们进行程序分析和调试。
本文将介绍如何使用objdump和readelf命令来查看可执行文件的高级技巧。
一、使用objdump查看可执行文件信息objdump命令是GNU Binutils工具集中的一个重要组成部分,它可以用于反汇编可执行文件,显示可执行文件的各个节(section)的内容。
下面是一些常用的objdump命令选项:1. objdump -h <可执行文件名>:显示可执行文件的节表信息。
该命令会列出可执行文件中各个节的起始偏移地址、大小等信息。
2. objdump -S <可执行文件名>:显示可执行文件的源代码和汇编代码。
该命令会将可执行文件中的机器码和源代码进行关联,并以汇编代码的形式显示出来,便于分析。
3. objdump -t <可执行文件名>:显示可执行文件的符号表。
符号表中包含了可执行文件中定义和引用的函数、变量等符号信息。
除了上述常用选项外,objdump还提供了很多其他有用的选项,可以根据实际需求进行选择。
二、使用readelf查看可执行文件信息readelf是GNU Binutils工具集中的另一个重要工具,它可以用于查看和分析可执行文件的各个节的信息,以及可执行文件的头部信息。
下面是一些常用的readelf命令选项:1. readelf -h <可执行文件名>:显示可执行文件的头部信息。
头部信息包含了可执行文件的类型、入口地址、节表偏移等重要信息。
2. readelf -S <可执行文件名>:显示可执行文件的节表信息。
节表信息包含了可执行文件中各个节的起始地址、大小、访问属性等详细信息。
可执行文件分析这里讨论的可执行文件分析不包括反汇编和逆向工程中涉及的内容,仅仅是一般管理员和调查人员分析的一般手法。
静态分析:所谓的静态分析就是在不运行可执行文件的前提下对文件进行分析,收集信息的方法的统称。
一般情况下用文本打开一个只执行文件,会出下一堆的乱码,但是可执行文件也有自己的格式,符合一定得规律,完全可以从windows可执行文件找到信息。
记录文件信息:分析文件之前首先给文件建档,记录文件相关信息,即就是记录文件所在系统、文件的全路径及谁什么时候发现的等内容。
然后记录可疑文件是如何找到的。
越详细越好,如通过什么确证分析工具在系统中找到的信息。
此外还要记录下系统的版本、补丁版本以及其他的信息如分区的类型。
除了以上的内容还要记录文件的MAC时间、文件系统中对他的引用及注册表中涉及他的键。
最后给文档进行完整性的检验的加密操作,使用MD-5,SHA-1等算法。
分析可执行文件;先使用杀毒软件查看可以的文件,然后使用strings.exe工具提取可疑文件中包含特定长度的字符串。
通过查看这些字符串,对可疑文件作判断。
另外一个提取字符串的工具是BinText。
他可以定位于二进制文件中ASCII,unicode及资源段中的字符串,并且连偏移位置显示在图形用户界面。
Pedump.exePEview.exe上述两个软件可以查看可执行文件更多的信息。
可以参考《Win32 PE可执行文件深入分析》两个文件包含了关于PE文件的详细的格式。
PE文件可以分为几个部分。
第一个,可能也是最重要的部分是IMAGE_DOS_HEADER.这部分的前两个字节是PE文件的文件签名MZ(十六进制的0x%A4D)。
这昂个字母是微软公司设设计可执行行文件格式的系统架构师的名字的缩写,不过文件能够执行并不是靠这两个字和.exe的扩展名来决定的。
整个IMAGE_DOS_HEADER结构共有64B组成。
除了刚才讲的PE文件签名之外,这个结构的最后一个DWORD(4B)也很重要,这个DWORD是e_lfanew,在ntimage.h中头文件中定义是指向真正的PE头部起始位置的指针——e_lfanew中的值就是IMAGE_DOS_HEADERS结构在PE文件中的偏移量。
Windows只有读取了IMAGE_DOS_HEADERS中的信息,才能解析可执行程序其余部分的含义,进而把文件加载到内存中并执行。
MZe_lfanewIMAGE_NT_HEADERS结构在文件中的偏移量应该是0xB8(也就是十进制的184)。
它包括一个签名和IMAGE_FILE _HEADER及IMAGE_OPTIONAL_HEADER两个结构.PE签名很简单就是字母PE再加上两个0(是个DWORD,共4B,可以表示为PE\00\00)。
签名接下来IMAGE_FILE_HEADER结构,紧接在PE签名之后,包含20B。
这个结构中有几个值对调查取证时很有用处的。
使用PEview查看PE_file_header结构查看。
图PEview查看IMAGE_FILE _HEADER结构图使用PEexporer查看pe格式信息对Time Date Stamp显得特别有用,他编译时连接器创建可执行文件的时间。
它通常指程序员编译生成该可执行文件时的系统时间,IMAGE_FILE _HEADER中段的数量应该和PE文件中段的数目相吻合。
同时IMAGE_FILE _HEADER结构中也提供了该文件一些特征。
Flag Value DescriptionIMAGE_FILE_RELOCS_STRIPPED0x0001Image only, Windows CE, andMicrosoft Windows NT® and later.This indicates that the file does notcontain base relocations and musttherefore be loaded at its preferredbase address. If the base address isnot available, the loader reports anerror. The default behavior of thelinker is to strip base relocations fromexecutable (EXE) files.IMAGE_FILE_EXECUTABLE_IMAGE0x0002Image only. This indicates that theimage file is valid and can be run. Ifthis flag is not set, it indicates a linkererror.IMAGE_FILE_LINE_NUMS_STRIPPED0x0004COFF line numbers have beenremoved. This flag is deprecated andshould be zero.IMAGE_FILE_LOCAL_SYMS_STRIPPED0x0008COFF symbol table entries for localsymbols have been removed. Thisflag is deprecated and should bezero.IMAGE_FILE_AGGRESSIVE_WS_TRIM0x0010Obsolete. Aggressively trim workingset. This flag is deprecated forWindows 2000 and later and must bezero.IMAGE_FILE_LARGE_ADDRESS_ AWARE 0x0020Application can handle > 2‑GB addresses.0x0040This flag is reserved for future use.IMAGE_FILE_BYTES_REVERSED_LO0x0080Little endian: the least significant bit(LSB) precedes the most significantbit (MSB) in memory. This flag isdeprecated and should be zero. IMAGE_FILE_32BIT_MACHINE0x0100Machine is based on a 32-bit-wordarchitecture.IMAGE_FILE_DEBUG_STRIPPED0x0200Debugging information is removedfrom the image file.IMAGE_FILE_REMOVABLE_RUN_ FROM_SWAP 0x0400If the image is on removable media, fully load it and copy it to the swapfile.IMAGE_FILE_NET_RUN_FROM_SWAP0x0800If the image is on network media,fully load it and copy it to the swapfile.IMAGE_FILE_SYSTEM0x1000The image file is a system file, not auser program.IMAGE_FILE_DLL0x2000The image file is a dynamic-linklibrary (DLL). Such files areconsidered executable files foralmost all purposes, although theycannot be directly run.IMAGE_FILE_UP_SYSTEM_ONLY0x4000The file should be run only on auniprocessor machine.IMAGE_FILE_BYTES_REVERSED_HI0x8000Big endian: the MSB precedes theLSB in memory. This flag isdeprecated and should be zero. IMAGE_FILE_HEADER中说明IMAGE_OPTIONAL_HEADER的结构大小也是很关键的,因为这个值给出了32b还是64b的应用程序的定义。
通常通过过头“2B”的直来确定,通常称其为幻数(magic)。
不过IMAGE_OPTIONAL_HEADER结构中的subSystem值需要关注。
这个值的作用是告诉操作系统运行该可执行文件需要那个子系统。
参考微软知识库。
同样也要关注Address of Entry Point值。
它是指向程序入口点(entry point,也就是主线程的应该运行的第一条指令的地址)指针。
这个指针加上可执行文件镜像加载的基地址,就可得到可执行文件被加载到内存中之后程序入口点的地址。
紧跟着后面的是多个IMAGE_DATA_DIRECTORYS结构,这些结构定义了PE 文件的信息结构目录,共有16个可能的目录,其中导入表(列出改程序需要导入和使用的dll)、导出表(对于dll来说,需要到处供其他程序使用的函数位置)、调试目录的起始地址和大小及资源目录等。
PEview查看IMAGE_DATA_DIRECTORYS的部分输出结果每个数据目录结构由一个相对虚地址(RVA)和有关数据长度两项数据构成,并且遵循严格的顺序排列。
上图中PEview给出了每个结构在PE文件中的偏移地址(如0x100)、有关数据加载的相对虚地址(如0x2FC0),以及每个结构体所代表的含义。
提示:在可执行文件被加载到内存中时,一般不能使用硬件编码的地址,而要使用其中定义的相对虚地址(RVA)这是因为可执行文件不可能在每个系统中加载到同样的内存地址。
RVA用来指定独立于文件的内存加载地址,也就是内存中文件加载地址的相对偏移地址。
计算RVA的公式如下:要得到真实的内存地址,将RVA加上可执行镜像加载的地址即可。
PE格式中最后一个要关注的内容是IMAGE_SELECT_HEADER结构。
在IMAGE_FILE_HEADER中定义了PE段数据量,也就是PE文件中包含几个IMAGE_SELECT_HEADER结构。
IMAGE_SELECT_HEADER其结构大小为40B,它包括段名(8B)、硬盘和内存段的长度及段的特性(是否可读、可写和可执行)。