一种快速修改elf格式文件的方法

文档序号:486953 发布日期:2022-01-04 浏览:1次 >En<

阅读说明:本技术 一种快速修改elf格式文件的方法 (Method for rapidly modifying ELF format file ) 是由 何俭飞 于 2021-09-03 设计创作,主要内容包括:本发明公开了一种快速修改ELF格式文件的方法,确定需要修改的地方;查看原文件大小,进行初期文件大小分配规划;进行文件切割:切割出3个文件,即为:开始较大文件、中间较小文件、末尾较大文件,待修改之处在中间较小文件之中;修改中间较小文件:利用编辑器与十六进制处理工具配合进行ELF文件片段修改;重新组装可执行文件:将切割出来的开始较大文件、末尾较大文件和修改后的中间较小文件重新按照原来的顺序进行组装,并将其输出内容重定向到一个文件;再次对重组后的文件进行检验。本发明不用修改源码,不用重新编译,通过直接修改ELF文件即可获得与修改源码、重新编译相同的二进制文件,极大的提升了修改ELF文件的速度。(The invention discloses a method for quickly modifying an ELF format file, which determines a place needing to be modified; checking the size of the original file, and performing initial file size distribution planning; and (3) cutting the file: cutting out 3 files, namely: starting a larger file, a middle smaller file and a tail larger file, wherein the file to be modified is positioned in the middle smaller file; modifying the intermediate smaller file: modifying the ELF file fragments by utilizing the cooperation of an editor and a hexadecimal processing tool; reassembling the executable file: the cut large file at the beginning, the large file at the end and the modified small file in the middle are assembled again according to the original sequence, and the output content of the files is redirected to one file; and checking the recombined file again. According to the invention, the source code is not required to be modified, the recompilation is not required, and the binary file which is the same as the source code modification and the recompilation can be obtained by directly modifying the ELF file, so that the speed of modifying the ELF file is greatly improved.)

一种快速修改ELF格式文件的方法

技术领域

本发明涉及通信技术领域,具体是指一种快速修改ELF格式文件的方法。

背景技术

在Unix系统和Linux系统下,ELF(Executable and Linkable Format)文件格式是一种非常普遍的文件格式,其可用于二进制文件、目标代码、可执行文件、共享库和核心转储文件等。

一般的,当需要修改ELF格式文件时,需要将对应的源代码进行修改,然后重新编译,以获得修改后的ELF文件。

现有技术中通过修改源码,重新编译来修改ELF格式文件,这种方法具有以下弊端:

(1)编译时间长:有的源文件修改后,重新编译会耗费大量时间,通常需要数个小时;

(2)有的ELF无法看到源码,无法编译;

所以,一种快速修改ELF格式文件的方法成为人们亟待解决的问题。

发明内容

本发明要解决的技术问题是不用修改源码,不用重新编译,通过直接修改ELF文件即可获得与修改源码、重新编译相同的二进制文件。

为解决上述技术问题,本发明提供的技术方案为:一种快速修改ELF格式文件的方法,包括以下步骤:

步骤1、确定需要修改的地方:使用反汇编工具、技术观察待修改的位置;

步骤2、查看原文件大小,进行初期文件大小分配规划:根据待修改所在处的偏移和ELF文件大小,合理规划出切割文件大小;

步骤3、进行文件切割:切割出3个文件,这3个文件为:开始较大文件、中间较小文件、末尾较大文件,待修改之处在中间较小文件之中;

步骤4、修改中间较小文件:利用编辑器与十六进制处理工具配合进行ELF文件片段修改;

步骤5、重新组装可执行文件:修改完中间较小文件后,将切割出来的开始较大文件、末尾较大文件和修改后的中间较小文件重新按照原来的顺序进行组装,并将其输出内容重定向到一个文件;

步骤6、再次对重组后的文件进行检验:再次通过反汇编工具观察修改效果以及新的执行效果。

作为改进,在Linux系统下,所述步骤1中的反汇编工具为objdump。

作为改进,所述步骤3中使用Linux下的字节拷贝工具dd来读取指定个数的字节进行文件切割。

作为改进,在Linux系统下,所述步骤4中的编辑器为vim,十六进制处理工具为xxd。

作为改进,所述步骤4中的ELF文件片段使用vim+xxd打开时以汇编代码的形式展现。

本发明与现有技术相比的优点在于:本发明不用修改源码,不用重新编译,通过直接修改ELF文件即可获得与修改源码、重新编译相同的二进制文件,极大的提升了修改ELF文件的速度。

具体实施方式

本发明的工作原理:

对于欲修改的二进制文件,做比较简单的修改时,比如将某处的“b=12”修改为“b=6”,可以使用vim、xxd和汇编知识直接操作二进制文件进行修改。

其中,vim用于装载这个二进制文件,xxd用来修改数据,最后再使用vim进行文件保存。

这种方式对于比较小的二进制文件来说,操作非常简单顺利,但是一旦二进制文件比较大,比如有100MB+,那么直接用vim、xxd操作时,非常卡顿;这时,可以使用dd先进行文件的切割,然后修改切割后的一部分文件,最后,使用cat或者dd再将文件接合起来,并加上“x”权限即可。

一般地,待修改的数据都会位于文件的中间位置,不是开头,也不是结尾,所以,一般将一份文件切割成3个小文件,对切割后的小文件进行修改。

下面对本发明一种快速修改ELF格式文件的方法做进一步的详细说明。

一种快速修改ELF格式文件的方法,包括以下步骤:

步骤1、确定需要修改的地方:

ELF文件是一种二进制文件,不是源代码文件,其由源代码文件经过编译器编译而来,当确定要修改的地方时,需要使用反汇编技术、工具来观察待修改的地方;在Linux系统下,最常用的反汇编工具为objdump,在objdump的观察下,可以较方便地确定待修改的代码所在;

步骤2、查看原文件大小,进行初期文件大小分配规划:

确定待修改代码所在之后,需要观察ELF文件的大小,根据待修改所在处的偏移和ELF文件大小,合理规划出切割文件大小;之所以对ELF文件进行切割,是因为一般的ELF文件体积较大,如果使用编辑器直接打开,编辑器会非常卡顿,不利于操作;

步骤3、进行文件切割:

规划出文件切割大小后,就可以使用Linux下的字节拷贝工具dd来读取指定个数的字节来进行文件切割;一般地,切割出3个文件,即:开始较大文件、中间较小文件、末尾较大文件,其中待修改之处就在中间较小文件中,这样编辑器操作起来会很顺畅,不会出现卡顿的现象;

步骤4、修改中间较小文件:

vim为Linux下的最常用的编辑器,配合xxd这个十六进制处理工具可以方便地进行ELF文件片段修改;另外,此处的修改需要具备一定的汇编知识,因为这个片段文件使用vim+xxd打开时会以汇编代码的形式展现;

步骤5、重新组装可执行文件:

当修改完中间较小文件后,需要将之前切割出来的开始较大文件、末尾较大文件和修改文件重新按照顺序进行组装,假设原ELF文件大小为600字节,将其切割为A+B+C共3个文件,且A为300字节,B为100字节,C为200字节,修改了B文件后,需要将A、B(修改后)、C这3个文件按照A、B、C的顺序重新组装成一个文件;重新组装的操作方式为顺序读取A、B(修改后)、C文件,将其输出内容重定向到一个文件,即可实现重新组装的目的;

步骤6、再次对重组后的文件进行检验:

对于重新组装后的文件,即被修改后的ELF文件,可以再次通过objdump工具观察修改效果,以及新的执行效果。

本发明一种快速修改ELF格式文件的方法的具体实施过程如下:

1)准备示例程序:modify_elf_file_test.c(不含行号);

2)编译上述程序:产生可执行文件modify_elf_file_test;

gcc-g3-O0-o modify_elf_file_test modify_elf_file_test.c

3)确定需要修改的地方:将“b=12”修改为“b=6”;

objdump-S modify_elf_file_test|nl

4)查看原文件大小,进行初期文件大小分配规划:

原文件大小:29384;

欲修改偏移量:5bb+0=5bb=1467;即从文件开始到“00”结束,共有“0~5bb”1467个字节;

修改部分大小:一般的,取100个字节;

剩下的文件大小:29384-1467-100=27817,此处的具体数值作用较小,作为参考使用,因为后面的dd命令的一些参数可以省略;

5)使用dd进行文件切割:

切出第一个文件:从头开始,共1467个字节;

dd if=modify_elf_file_test of=part1 ibs=1 count=1467

切出第二个文件,跳过开头的1467个字节,切出100个字节;这个文件只有100个字节,为待修改部分;

dd if=modify_elf_file_test of=part2 ibs=1 obs=1 skip=1467 count=100

切出第三个文件,跳过开头(1467+100=1567)个字节;最后这个可以不用加count,默认会读取到最后;

dd if=modify_elf_file_test of=part3 ibs=1 obs=1 skip=1567

先合并,再校验:从结果得知,文件大小、md5值,运行结果没有问题。

cat part1 part2 part3>modify_elf_file_test_MD

md5sum modify_elf_file_test modify_elf_file_test_MD

./modify_elf_file_test

./modify_elf_file_test_MD

6)修改中间文件part2:

先复制一份:cp part2 part2.bak

vim直接打开副本:vim part2.bak

xxd进行打开:%!xxd-c 16-g 1

在xxd打开的窗口中定位并修改:文件中“0c”是要被改的数据,最后的“0a”是vim在没有“set noendofline binary”设置时,打开文件后自动添加的换行符,在后续步骤中要处理掉;

将b的值修改为6:即将“0c”修改为“06”;

xxd恢复:%!xxd-r

vim保存:保存后能够发现多出一个字节,这个字节就是上述的换行符:“0a”;此处应当注意:在多出一个字节即输出“101”字节的上一行会出现“100”,这是因为新文件的大小减去了“1”,并非真正的输出结果。

处理掉换行符“0a”:

dd if=part2.bak of=part2.bak.new ibs=1 obs=1 count=100

7)重新组装可执行文件:能够看出运行结果没有问题,modify_elf_file_test_MD_new为新的ELF文件;

cat part1 part2.bak.new part3>modify_elf_file_test_MD_new

ll modify_elf_file_test*

md5sum modify_elf_file_test*

./modify_elf_file_test

./modify_elf_file_test_MD

./modify_elf_file_test_MD_new

8)再次使用“objdump-S modify_elf_file_test_MD_new”进行检验:修改成功;

运行过程中仍然出现“b=12”的符号信息,这是符号信息没有更新导致的,不影响程序正常执行。

以上对本发明及其实施方式进行了描述,这种描述没有限制性,如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。

7页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种电子病历编辑器及其调用方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!