| ELF文件格式一例分析: -[ELF Linux assembly] |
ELF文件格式一例分析:以nasm生成一尽量小的ELF文件,以二进制方式,以objdump方式,以readelf方式,分析加载入内存及运行规律,得出结论。 编辑一个小的asm文件如下: crq@ $ cat new18.asm
global _start
_start:
ud0
ud1
ud2 很简单,只有 ud0, ud1, ud2 三个指令,都是产生非法 Opcode 码所用。编译生成ELF如下: crq@ $ nasm -f elf new18.asm crq@ $ ld new18.o这样就生成了a.out是ELF格式文件,再使用objcopy除去无关紧要的节: crq@ $ objcopy -S -R .comment -R .bss a.out运行: crq@ $ ./a.out Illegal instruction果如所料,程序接收到一个 SIGILL 信号默认动作是被 kill 掉了,再使用 objdump 反汇编一下: crq@ $ objdump -d a.out a.out: file format elf32-i386 Disassembly of section .text: 08048080 <.text>: 8048080: 0f ff (bad) 8048082: 0f b9 ud2b 8048084: 0f 0b ud2a正文段只有三行汇编语言指令。文件大小: crq@ $ ls -l a.out -rwxr-xr-x 1 crq users 272 Nov 22 09:22 a.out剩余 272 Bytes. 再使用 readelf 分析: crq@ $ readelf -a a.out ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Intel 80386 Version: 0x1 Entry point address: 0x8048080 Start of program headers: 52 (bytes into file) Start of section headers: 152 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 1 Size of section headers: 40 (bytes) Number of section headers: 3 Section header string table index: 2 Section Headers: [Nr] Name Type Addr Off Size ES *** Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 08048080 000080 000006 00 AX 0 0 16 [ 2] .shstrtab STRTAB 00000000 000086 000011 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz *** Align LOAD 0x000000 0x08048000 0x08048000 0x00086 0x00086 R E 0x1000 Section to Segment mapping: Segment Sections... 00 .text There is no dynamic segment in this file. There are no relocations in this file. There are no unwind sections in this file. No version information found in this file.ELF Header部分正常,Section Headers中有三项,第一项按惯例为空的。 Program Headers只有一项。再印出二进制码如下: crq@ $ hexdump -C a.out 00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 02 00 03 00 01 00 00 00 80 80 04 08 34 00 00 00 |............4...| 00000020 98 00 00 00 00 00 00 00 34 00 20 00 01 00 28 00 |........4. ...(.| 00000030 03 00 02 00 01 00 00 00 00 00 00 00 00 80 04 08 |................| 00000040 00 80 04 08 86 00 00 00 86 00 00 00 05 00 00 00 |................| 00000050 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000080 0f ff 0f b9 0f 0b 00 2e 73 68 73 74 72 74 61 62 |........shstrtab| 00000090 00 2e 74 65 78 74 00 00 00 00 00 00 00 00 00 00 |..text..........| 000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000000c0 0b 00 00 00 01 00 00 00 06 00 00 00 80 80 04 08 |................| 000000d0 80 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 |................| 000000e0 10 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 |................| 000000f0 00 00 00 00 00 00 00 00 86 00 00 00 11 00 00 00 |................| 00000100 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 000001100x000~0x034 是 ELF Header; 0x034~0x054 是一项Program Headers; 0x054~0x080 是填充零字节; 0x080~0x086 是 .text 段内容; 0x086~0x098 是 .shstrtab 段内容; 0x098~0x110 是三项Section Headers; 对照 elf.h 文件分析如下: 00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 03 00 01 00 00 00 80 80 04 08 34 00 00 00 |............4...|
00000020 98 00 00 00 00 00 00 00 34 00 20 00 01 00 28 00 |........4. ...(.|
00000030 03 00 02 00 |.... |
typedef struct elf32_hdr {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry; /* Entry point */
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr; 其中 ELF32_Half 是16位,其余类型 ELF32_Word, ELF32_Addr, ELF32_Off 等都是32位。 宏 EI_NIDENT 定义为 16,即 ELF Header 头部有16Bytes特征字节。 00000030 01 00 00 00 00 00 00 00 00 80 04 08 | ............|
00000040 00 80 04 08 86 00 00 00 86 00 00 00 05 00 00 00 |................|
00000050 00 10 00 00 |.... |
typedef struct elf32_phdr{
Elf32_Word p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
Elf32_Word p_filesz;
Elf32_Word p_memsz;
Elf32_Word p_flags;
Elf32_Word p_align;
} Elf32_Phdr; 00000080 0f ff 0f b9 0f 0b |...... | 00000080 00 2e 73 68 73 74 72 74 61 62 | ..shstrtab| 00000090 00 2e 74 65 78 74 00 00 |..text.. | 00000090 00 00 00 00 00 00 00 00 | ........|
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000c0 0b 00 00 00 01 00 00 00 06 00 00 00 80 80 04 08 |................|
000000d0 80 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 |................|
000000e0 10 00 00 00 00 00 00 00 |........ |
000000e0 01 00 00 00 03 00 00 00 | ........|
000000f0 00 00 00 00 00 00 00 00 86 00 00 00 11 00 00 00 |................|
00000100 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|
typedef struct {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr; 又查阅 nasmdoc.txt 一文中对这三个 UD 指令的描述如下: B.4.320 `UD0', `UD1', `UD2': Undefined Instruction
UD0 ; 0F FF [186,UNDOC]
UD1 ; 0F B9 [186,UNDOC]
UD2 ; 0F 0B [186]
`UDx' can be used to generate an invalid opcode exception, for
testing purposes.
`UD0' is specifically documented by AMD as being reserved for this
purpose.
`UD1' is documented by Intel as being available for this purpose.
`UD2' is specifically documented by Intel as being reserved for this
purpose. Intel document this as the preferred method of generating
an invalid opcode exception.
All these opcodes can be used to generate invalid opcode exceptions
on all currently available processors. 有趣的是,注意 objdump 的这一段输出: 8048080: 0f ff (bad) 8048082: 0f b9 ud2b 8048084: 0f 0b ud2a在 nasm 中的三条合法指令在 GNU as 中是只有两条合法的,并且名称也不相同,ud2a 和 ud2b,三条用途都是产生 opcode 异常 |
相关推荐
onnx入门教程(一):解决模型部署中的难题
直接使用 PyTorch 模型的话,我们修改几行代码就能实现模型输入的动态化。但在模型部署中,我们要花数倍的时间来设法解决这一问题。现在,让我们顺着解决问题的思路,体验一下模型部署的困难,并学习使用自定义算子的方式,解决超分辨率模型的动态化问题。刚刚的报错是因为 PyTorch 模型在导出到 ONNX 模型时,模型的输入参数的类型必须全部是 torch.Tensor。而实际上我们传入的第二个参数" 3 "是一个整形变量。这不符合 PyTorch 转 ONNX 的规定。我们必须要修改一下原来的模型的输入。
C语言代码的x86-64汇编指令分析过程记录
本文通过分析一个简单的C程序的x86-64汇编代码以及栈的存储情况,使读者对汇编程序的执行步骤有一个初步的了解。
MATLAB实战:从零推导合成孔径雷达(SAR)后向投影(BP)算法核心公式与代码实现
本文详细介绍了如何使用MATLAB从零推导合成孔径雷达(SAR)后向投影(BP)算法的核心公式与代码实现。通过基础概念讲解、数学原理推导、距离维脉冲压缩实现及完整MATLAB代码展示,帮助读者掌握SAR成像的关键技术。特别针对BP算法的优化技巧和常见问题提供了实用解决方案,适合雷达信号处理领域的开发者和研究者参考。
ELF文件格式一例分析
ELF文件格式一例分析:以nasm生成一尽量小的ELF文件,以二进制方式,以objdump方式,以readelf方式,分析加载入内存及运行规律,得出结论。 编辑一个小的asm文件如下:crq@ $ cat new18.asmglobal _start_start: ud0 ud1 ud2很简单,只有 ud0, ud1, ud
VMware Workstation Pro 17 最新破解版安装教程(附永久激活密钥)
本文详细介绍了VMware Workstation Pro 17专业版的安装与配置指南,包括系统要求检查、官方版本安装流程、高级配置优化及常见问题排查。通过合规使用官方版本,开发者可以充分利用其强大的虚拟化能力,提升多平台开发与测试效率。
华科软院研究生第一学期的事项(奖学金、学业、考试等)
奖助 研究生补助 每月500,全年共6000元 每个月月底学院会打到银行卡里 碰上开学、过年会延后发放 17年10月底发了9、10两个月的钱 18年3月底发了2、3月的钱 学业奖学金 17届全日制每人都有 按照考研最后综合成绩排名 前16 10000 前80 8000 其他 4000 大概11月底发 注意:第一年如果有挂科的话,第二年就不能参加学业奖学金评...
C语言编程时可能会发生的错误(不定时更新)
VS 提示"CL.exe已退出,代码为2",检查是否有函数没有写返回值。 某个文件内的全局变量不要放在它的头文件中,不然在主文件调用时会引发重定义错误。 定义结构体对齐时,#pragma pack(n)和#pragma pack()要成对使用,将结构放在它们中间,n取值为1,2,4,8 GCC: 如果出现下面的错误,说明内联汇编出错,如果内联汇编没有添加约束(即没有使用“:”),则寄存器...
SolidWorks参数化建模实战:从规则定义到智能装配
本文深入探讨SolidWorks参数化建模的实战技巧,从规则定义到智能装配的全流程。通过实际案例展示如何提升设计效率300%,确保一致性,并加速系列化开发。重点解析草图阶段植入设计意图、装配体级参数化及高级技巧,帮助工程师掌握三维建模的核心竞争力。
ELF文件格式解析
1. ELF文件简介 首先,你需要知道的是所谓对象文件(Object files)有三个种类: 可重定位的对象文件(Relocatable file) 这是由汇编器汇编生成的 .o 文件。后面的链接器(link editor)拿一个或一些 Relocatable object files 作为输入,经链接处理后,生成一个可执行的对象文件 (Executable file) 或者一个可被共享的对...
MobaXterm详细使用教程
当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…
AI工具 | 每个打工人必备的15款人工智能超级工具
不过,还是有一些靠谱的人工智能平台,它们可不只是营销噱头。有些AI公司正试图改变游戏规则。人工智能工具让人们能够更聪明地工作,而不是更辛苦地劳作。如果你想知道未来有什么,那就来看看这10款人工智能工具吧,它们将彻底改变我们的工作方式。
Linux ELF文件格式分析
Linux ELF文件格式分析一、ELF文件格式概述ELF = Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。扩展名为elf。 其主要有三种主要类型: 适于连接的可重定位文件(relocatable file),可与其它目标文件
华为面试手撕真题【求1-n的最小公倍数】
求1-n的最小公倍数
ELF 文件格式
ELF 是一种常用的可执行文件和可链接库格式。它是一种通用的二进制文件格式,用于在 Unix 和类 Unix 系统上进行可执行文件和库的存储和传输。
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
elf文件格式分析
各种讲解elf文件格式一上来就是各种数据类型,看了半天却不知道这些数据类型是干啥的,所以咱就先找个例子直接上手,这样对elf文件格式有个具体而生动的了解。 然后再去看那些手册,就完全不惧了~。 我们使用一个汇编程序max.s并对其进行编译链接产生的两个elf文件来对比分析elf文件。 例子程序max.s来自《Linux C 一站式编程》。 ps:这是一本看完可以真正可以深入理解C语言精华的
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
ELF文件格式的详解
1.说明 2.elf文件的基本格式 3.elf文件的头部信息 4.elf文件的节区(Section) 4.1 节区的作用 4.2 节区的组成 5.elf文件的段(Segment) 6.用python解析elf文件 7.总结 1.说明 ELF的英文全称是The Executable and Linking Format,最初是由UNIX系统实验室开发、发布的ABI(Application Binary Int..
elf文件格式解析
linux 恶意软件研究相关工具 及下载地址:https://remnux.org/docs/distro/tools/ 系统: Sysdig(https://pkgs.org/download/sysdig)Unhide(取消隐藏) 反汇编: Vivisect, Udis86, objdump 调试工具: Evan’s Debugger (EDB), GNU Project Debugge...
ELF文件格式分析文档:深入探索ELF结构
ELF文件格式分析文档:深入探索ELF结构 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在操作系统的世界中,ELF(Executable and Linkable Format)是一种用于描述可执行文件、对象代码、共享库等文件的格式。今天,我们为您推荐的开源项目——“ELF文件格式分析文档”,是由北京大学信息科学技术学院操作系统实验室提供的宝贵教学材料。本项目由滕启...
elf文件格式
ELF的英文全称是The Executable and Linking Format,最初是由UNIX系统实验室开发、发布的ABI(Application Binary Interface)接口的一部分,也是Linux的主要可执行文件格式。本文主要从elf文件的组成构造的角度来进行分析,将elf文件的解析通过一步一步的分析得到里面的信息,同时通过python脚本解析,可以直观的看到文件的信息,通过本文的阅读,将对elf文件格式有着更加深刻的理解。
elf文件格式总结
1 简介可执行链接格式(Executable and Linking Format)最初是由 UNIX 系统实验室(UNIX System Laboratories,USL)开发并发布的,作为应用程序二进制接口(Application Binary Interface,ABI)的一部分。工具接口标准(Tool Interface Standards,TIS)委员会将还在发展的 ELF 标准选作为一
elf文件格式_ELF文件格式的详解
ELF文件格式的详解1.说明2.elf文件的基本格式3.elf文件的头部信息4.elf文件的节区(Section)4.1 节区的作用4.2 节区的组成5.elf文件的段(Segment)6.用python解析elf文件7.总结 1.说明 ELF的英文全称是The Executable and Linking Format,最初是由UNIX系统实验室开发、发布的ABI(Applicatio...
ELF文件格式分析
ELF文件格式分析 https://www.cnblogs.com/EliteDci/p/5578901.html 一般的 ELF 文件包括三个索引表:ELF header,Program header table,Section header table。 1)ELF header:在文件的开始,保存了路线图,描述了该文件的组织情况。 2)Program header table:告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。 3)...
1128



被折叠的 条评论
为什么被折叠?



