获取二进制文件比较大小差异的高级概述?

逆向工程 二元分析 雷达2 bin-diffing
2021-07-10 11:36:55

我有两个二进制文件,其中一个是从Protostar's ( stack0example) 中提取的用最新版本的 GCC编译(从源代码另一个尺寸差异是巨大的。我的版本是 11.5 Kb。Protostar 分布式版本为 21.9 Kb。我将如何获得高层次的概述以了解尺寸的巨大差异?

我正在编译我的版本

CFLAGS=-m32 -fno-stack-protector -std=c89 -fno-PIE -no-pie -mpreferred-stack-boundary=2 -fno-chkp-use-wrappers -D_FORTIFY_SOURCE=0 -fno-check-pointer-bounds -z execstack -z norelro -Os
  • 当我使用 Radare 的节目信息时,除了尺寸外i 一切都相同。
  • 两者的主要功能非常相似。

我只是想知道是什么导致原始文件变得如此之大。是否有类似的选项或工具radiff2可以帮助我深入解释我的编译器现在所做的与编译它的编译器不同?

2个回答

Bloaty McBloatFace是一个编译的二进制大小分析器,它可以提供您所拥有的部分大小的细分以及许多其他分解方法。

我不会接受这个答案,因为很可能其他人会告诉我更好的方法。但是,浏览该网站时,我看到了一张 Radare 的旧照片,它似乎可以通过一个S=选项来做我想做的事这是按部分显示的细分。这似乎是一个很好的起点。

在此处输入图片说明

事实证明,现在非常接近undocumented iS=option

使用两个二进制文件,我看到的差别真的快,

[0x00000000]> iS=
00  0x00000000 |--------------------------------------------------------------------------------------------------| 0x00000000     0 ---      
01  0x08048114 |-#------------------------------------------------------------------------------------------------| 0x08048127    19 r--  .interp
02  0x08048128 |-#------------------------------------------------------------------------------------------------| 0x08048148    32 r--  .note.ABI_tag
03  0x08048148 |-#------------------------------------------------------------------------------------------------| 0x0804816c    36 r--  .note.gnu.build_id
04  0x0804816c |-#------------------------------------------------------------------------------------------------| 0x08048198    44 r--  .hash
05  0x08048198 |-#------------------------------------------------------------------------------------------------| 0x080481b8    32 r--  .gnu.hash
06  0x080481b8 |-##-----------------------------------------------------------------------------------------------| 0x08048218    96 r--  .dynsym
07  0x08048218 |--#-----------------------------------------------------------------------------------------------| 0x08048267    79 r--  .dynstr
08  0x08048268 |--#-----------------------------------------------------------------------------------------------| 0x08048274    12 r--  .gnu.version
09  0x08048274 |--#-----------------------------------------------------------------------------------------------| 0x08048294    32 r--  .gnu.version_r
10  0x08048294 |--#-----------------------------------------------------------------------------------------------| 0x0804829c     8 r--  .rel.dyn
11  0x0804829c |--##----------------------------------------------------------------------------------------------| 0x080482bc    32 r--  .rel.plt
12  0x080482bc |---#----------------------------------------------------------------------------------------------| 0x080482ec    48 r-x  .init
13  0x080482ec |---#----------------------------------------------------------------------------------------------| 0x0804833c    80 r-x  .plt
14  0x08048340 |---###--------------------------------------------------------------------------------------------| 0x080484dc   412 r-x  .text
15  0x080484dc |-----#--------------------------------------------------------------------------------------------| 0x080484f8    28 r-x  .fini
16  0x080484f8 |-----#--------------------------------------------------------------------------------------------| 0x08048534    60 r--  .rodata
17  0x08048534 |-----#--------------------------------------------------------------------------------------------| 0x08048538     4 r--  .eh_frame
18  0x08049538 |-----#--------------------------------------------------------------------------------------------| 0x08049540     8 rw-  .ctors
19  0x08049540 |-----#--------------------------------------------------------------------------------------------| 0x08049548     8 rw-  .dtors
20  0x08049548 |-----#--------------------------------------------------------------------------------------------| 0x0804954c     4 rw-  .jcr
21  0x0804954c |-----##-------------------------------------------------------------------------------------------| 0x0804961c   208 rw-  .dynamic
22  0x0804961c |------#-------------------------------------------------------------------------------------------| 0x08049620     4 rw-  .got
23  0x08049620 |------#-------------------------------------------------------------------------------------------| 0x0804963c    28 rw-  .got.plt
24  0x0804963c |-------#------------------------------------------------------------------------------------------| 0x08049644     8 rw-  .data
25  0x08049644 |-------#------------------------------------------------------------------------------------------| 0x0804964c     0 rw-  .bss
26* 0x00000000 |-------############-------------------------------------------------------------------------------| 0x00000a68  2.6K ---  .stab
27* 0x00000000 |------------------###################################################################-------------| 0x00003a5c 14.6K ---  .stabstr
28* 0x00000000 |------------------------------------------------------------------------------------#-------------| 0x00000039    57 ---  .comment
29* 0x00000000 |------------------------------------------------------------------------------------##------------| 0x000000fd   253 ---  .shstrtab
30* 0x00000000 |-------------------------------------------------------------------------------------------#####--| 0x00000440    1K ---  .symtab
31* 0x00000000 |------------------------------------------------------------------------------------------------##| 0x0000020c   524 ---  .strtab
32  0x08048034 |##------------------------------------------------------------------------------------------------| 0x08048114   224 r-x  PHDR
33  0x08048114 |-#------------------------------------------------------------------------------------------------| 0x08048127    19 r--  INTERP
34  0x08048000 |######--------------------------------------------------------------------------------------------| 0x08048538  1.3K r-x  LOAD0
35  0x08049538 |-----###------------------------------------------------------------------------------------------| 0x0804964c   268 rw-  LOAD1
36  0x0804954c |-----##-------------------------------------------------------------------------------------------| 0x0804961c   208 rw-  DYNAMIC
37  0x08048128 |-#------------------------------------------------------------------------------------------------| 0x0804816c    68 r--  NOTE
38  0x00000000 |--------------------------------------------------------------------------------------------------| 0x00000000     0 rwx  GNU_STACK
39  0x08048000 |#-------------------------------------------------------------------------------------------------| 0x08048034    52 rw-  ehdr
=>  0x00000000 |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| 0xffffffffffffffff

.stabstr东西是巨大的。 我在 Stack Overflow 上找到了这个

如果调试格式在任一平台上都是 stabs,我会感到惊讶,除非您明确要求它-gstabs作为 gcc 的参数。

我启用了该选项,突然间我的新二进制文件也有了一个,而且它的大小与旧的非常接近。