识别用于二进制文件的编译器

逆向工程 二元分析
2021-06-18 18:51:01

我试图从“字符串”输出的分析中重新创建一个二进制文件。我不知道该文件使用了哪个编译器。好像不是shc。有没有人从已知的编译器中识别出这种输出模式?

strings *omitted*
/lib/ld-linux.so.2
libc.so.6
_IO_stdin_used
puts
setreuid
printf
getchar
system
geteuid
strcmp
__libc_start_main
__gmon_start__
GLIBC_2.0
PTRhp
QVh;
secrf
love
UWVS
t$,U
[^_]

我可以包括其余的输出。编辑:脚本语言可能是破折号

1个回答

看起来像是使用 GCC 工具链创建的 Linux ELF32 二进制文件的前几个部分的字符串。不过我不能告诉你哪个版本的 GCC。

您的问题应包括以下命令的输出:

  • file [name of binary]
  • readelf -h [name of binary]
  • readelf -SW [name of binary]
  • objdump -dj .text [name of binary]

strings输出本身通常不足以执行编译器工具链出处

您还应该包含 的完整输出strings,因为有时编译器在二进制文件中包含一个标识符:

/lib/ld-linux.so.2
libc.so.6
_IO_stdin_used
printf
__libc_start_main
__gmon_start__
GLIBC_2.0
PTRh
[^_]
;*2$"
GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4    <------------------- 
GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
.symtab
.strtab
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rel.dyn
.rel.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.dynamic
.got
.got.plt
.data
.bss
.comment
crtstuff.c
__JCR_LIST__
deregister_tm_clones
register_tm_clones
__do_global_dtors_aux
completed.6600
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
trigger_sigsegv.c
__FRAME_END__
__JCR_END__
__init_array_end
_DYNAMIC
__init_array_start
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
_ITM_deregisterTMCloneTable
__x86.get_pc_thunk.bx
data_start
printf@@GLIBC_2.0
_edata
_fini
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_start_main@@GLIBC_2.0
__libc_csu_init
_end
_start
_fp_hw
__bss_start
main
_Jv_RegisterClasses
__TMC_END__
_ITM_registerTMCloneTable
_init