如何查看二进制可执行文件的源码?

sh/bash/dash/ksh/zsh等Shell脚本
回复
moon_rui
帖子: 7
注册时间: 2014-11-30 17:57
系统: Ubuntu 14.04

如何查看二进制可执行文件的源码?

#1

帖子 moon_rui » 2014-11-30 18:09

在网上下载了一个用C语言编写的算法程序,解压后是一个二进制可执行文件,
我想得到该算法的源代码,应该如何操作呢?
本人新手,求各位大神指教。

注:附件为该算法文件
frsac.gz
(7.93 KiB) 已下载 67 次
附件
frsac.gz
(7.93 KiB) 已下载 72 次
头像
hoxily
帖子: 39
注册时间: 2011-02-11 21:10

Re: 如何查看二进制可执行文件的源码?

#2

帖子 hoxily » 2014-11-30 19:32

截取了objdump -d frsac输出的main片断如下:

代码: 全选

0000000000400ac4 <main>:
  400ac4:	55                   	push   %rbp
  400ac5:	48 89 e5             	mov    %rsp,%rbp
  400ac8:	48 83 c4 80          	add    $0xffffffffffffff80,%rsp
  400acc:	89 7d 8c             	mov    %edi,-0x74(%rbp)
  400acf:	48 89 75 80          	mov    %rsi,-0x80(%rbp)
  400ad3:	48 c7 45 c0 00 00 00 	movq   $0x0,-0x40(%rbp)
  400ada:	00 
  400adb:	48 8d 45 b8          	lea    -0x48(%rbp),%rax
  400adf:	48 89 c7             	mov    %rax,%rdi
  400ae2:	e8 79 fe ff ff       	callq  400960 <time@plt>
  400ae7:	89 c7                	mov    %eax,%edi
  400ae9:	e8 52 fe ff ff       	callq  400940 <srand@plt>
  400aee:	b8 00 00 80 3f       	mov    $0x3f800000,%eax
  400af3:	89 45 f4             	mov    %eax,-0xc(%rbp)
  400af6:	b8 66 66 66 3f       	mov    $0x3f666666,%eax
  400afb:	89 45 f8             	mov    %eax,-0x8(%rbp)
  400afe:	e9 e7 00 00 00       	jmpq   400bea <main+0x126>
  400b03:	8b 45 fc             	mov    -0x4(%rbp),%eax
  400b06:	83 f8 68             	cmp    $0x68,%eax
  400b09:	0f 84 c0 00 00 00    	je     400bcf <main+0x10b>
  400b0f:	83 f8 68             	cmp    $0x68,%eax
  400b12:	7f 13                	jg     400b27 <main+0x63>
  400b14:	83 f8 3f             	cmp    $0x3f,%eax
  400b17:	0f 84 b9 00 00 00    	je     400bd6 <main+0x112>
  400b1d:	83 f8 66             	cmp    $0x66,%eax
  400b20:	74 14                	je     400b36 <main+0x72>
  400b22:	e9 c3 00 00 00       	jmpq   400bea <main+0x126>
  400b27:	83 f8 70             	cmp    $0x70,%eax
  400b2a:	74 6b                	je     400b97 <main+0xd3>
  400b2c:	83 f8 74             	cmp    $0x74,%eax
  400b2f:	74 2e                	je     400b5f <main+0x9b>
  400b31:	e9 b4 00 00 00       	jmpq   400bea <main+0x126>
  400b36:	48 8b 05 73 45 20 00 	mov    0x204573(%rip),%rax        # 6050b0 <__bss_start>
  400b3d:	48 89 45 c0          	mov    %rax,-0x40(%rbp)
  400b41:	b8 50 39 40 00       	mov    $0x403950,%eax
  400b46:	48 8b 55 c0          	mov    -0x40(%rbp),%rdx
  400b4a:	48 89 d6             	mov    %rdx,%rsi
  400b4d:	48 89 c7             	mov    %rax,%rdi
  400b50:	b8 00 00 00 00       	mov    $0x0,%eax
  400b55:	e8 a6 fd ff ff       	callq  400900 <printf@plt>
  400b5a:	e9 8b 00 00 00       	jmpq   400bea <main+0x126>
  400b5f:	48 8b 05 4a 45 20 00 	mov    0x20454a(%rip),%rax        # 6050b0 <__bss_start>
  400b66:	48 89 c7             	mov    %rax,%rdi
  400b69:	e8 62 fd ff ff       	callq  4008d0 <atof@plt>
  400b6e:	66 0f 14 c0          	unpcklpd %xmm0,%xmm0
  400b72:	66 0f 5a c0          	cvtpd2ps %xmm0,%xmm0
  400b76:	f3 0f 11 45 f8       	movss  %xmm0,-0x8(%rbp)
  400b7b:	f3 0f 10 45 f8       	movss  -0x8(%rbp),%xmm0
  400b80:	0f 5a c0             	cvtps2pd %xmm0,%xmm0
  400b83:	b8 61 39 40 00       	mov    $0x403961,%eax
  400b88:	48 89 c7             	mov    %rax,%rdi
  400b8b:	b8 01 00 00 00       	mov    $0x1,%eax
  400b90:	e8 6b fd ff ff       	callq  400900 <printf@plt>
  400b95:	eb 53                	jmp    400bea <main+0x126>
  400b97:	48 8b 05 12 45 20 00 	mov    0x204512(%rip),%rax        # 6050b0 <__bss_start>
  400b9e:	48 89 c7             	mov    %rax,%rdi
  400ba1:	e8 2a fd ff ff       	callq  4008d0 <atof@plt>
  400ba6:	66 0f 14 c0          	unpcklpd %xmm0,%xmm0
  400baa:	66 0f 5a c0          	cvtpd2ps %xmm0,%xmm0
  400bae:	f3 0f 11 45 f4       	movss  %xmm0,-0xc(%rbp)
  400bb3:	f3 0f 10 45 f4       	movss  -0xc(%rbp),%xmm0
  400bb8:	0f 5a c0             	cvtps2pd %xmm0,%xmm0
  400bbb:	b8 71 39 40 00       	mov    $0x403971,%eax
  400bc0:	48 89 c7             	mov    %rax,%rdi
  400bc3:	b8 01 00 00 00       	mov    $0x1,%eax
  400bc8:	e8 33 fd ff ff       	callq  400900 <printf@plt>
  400bcd:	eb 1b                	jmp    400bea <main+0x126>
  400bcf:	e8 26 02 00 00       	callq  400dfa <write_instruction>
  400bd4:	eb 14                	jmp    400bea <main+0x126>
  400bd6:	bf 87 39 40 00       	mov    $0x403987,%edi
  400bdb:	e8 e0 fc ff ff       	callq  4008c0 <puts@plt>
  400be0:	bf 01 00 00 00       	mov    $0x1,%edi
  400be5:	e8 b6 fd ff ff       	callq  4009a0 <exit@plt>
  400bea:	48 8b 4d 80          	mov    -0x80(%rbp),%rcx
  400bee:	8b 45 8c             	mov    -0x74(%rbp),%eax
  400bf1:	ba 9b 39 40 00       	mov    $0x40399b,%edx
  400bf6:	48 89 ce             	mov    %rcx,%rsi
  400bf9:	89 c7                	mov    %eax,%edi
  400bfb:	b8 00 00 00 00       	mov    $0x0,%eax
  400c00:	e8 8b fd ff ff       	callq  400990 <getopt@plt>
  400c05:	89 45 fc             	mov    %eax,-0x4(%rbp)
  400c08:	83 7d fc ff          	cmpl   $0xffffffff,-0x4(%rbp)
  400c0c:	0f 85 f1 fe ff ff    	jne    400b03 <main+0x3f>
  400c12:	48 83 7d c0 00       	cmpq   $0x0,-0x40(%rbp)
  400c17:	75 05                	jne    400c1e <main+0x15a>
  400c19:	e8 dc 01 00 00       	callq  400dfa <write_instruction>
  400c1e:	ba a3 39 40 00       	mov    $0x4039a3,%edx
  400c23:	48 8b 45 c0          	mov    -0x40(%rbp),%rax
  400c27:	48 89 d6             	mov    %rdx,%rsi
  400c2a:	48 89 c7             	mov    %rax,%rdi
  400c2d:	e8 4e fd ff ff       	callq  400980 <fopen@plt>
  400c32:	48 89 45 c8          	mov    %rax,-0x38(%rbp)
  400c36:	48 83 7d c8 00       	cmpq   $0x0,-0x38(%rbp)
  400c3b:	75 14                	jne    400c51 <main+0x18d>
  400c3d:	bf a5 39 40 00       	mov    $0x4039a5,%edi
  400c42:	e8 79 fc ff ff       	callq  4008c0 <puts@plt>
  400c47:	bf 00 00 00 00       	mov    $0x0,%edi
  400c4c:	e8 4f fd ff ff       	callq  4009a0 <exit@plt>
  400c51:	be c2 39 40 00       	mov    $0x4039c2,%esi
  400c56:	48 8d 7d e8          	lea    -0x18(%rbp),%rdi
  400c5a:	48 8d 4d e4          	lea    -0x1c(%rbp),%rcx
  400c5e:	48 8d 55 e0          	lea    -0x20(%rbp),%rdx
  400c62:	48 8b 45 c8          	mov    -0x38(%rbp),%rax
  400c66:	49 89 f8             	mov    %rdi,%r8
  400c69:	48 89 c7             	mov    %rax,%rdi
  400c6c:	b8 00 00 00 00       	mov    $0x0,%eax
  400c71:	e8 3a fc ff ff       	callq  4008b0 <__isoc99_fscanf@plt>
  400c76:	8b 45 e0             	mov    -0x20(%rbp),%eax
  400c79:	48 98                	cltq   
  400c7b:	48 c1 e0 02          	shl    $0x2,%rax
  400c7f:	48 89 c7             	mov    %rax,%rdi
  400c82:	e8 e9 fc ff ff       	callq  400970 <malloc@plt>
  400c87:	48 89 45 d0          	mov    %rax,-0x30(%rbp)
  400c8b:	8b 55 e4             	mov    -0x1c(%rbp),%edx
  400c8e:	8b 45 e0             	mov    -0x20(%rbp),%eax
  400c91:	89 d6                	mov    %edx,%esi
  400c93:	89 c7                	mov    %eax,%edi
  400c95:	e8 a0 01 00 00       	callq  400e3a <realarray_allocation>
  400c9a:	48 89 45 d8          	mov    %rax,-0x28(%rbp)
  400c9e:	c7 45 ec 00 00 00 00 	movl   $0x0,-0x14(%rbp)
  400ca5:	eb 78                	jmp    400d1f <main+0x25b>
  400ca7:	c7 45 f0 00 00 00 00 	movl   $0x0,-0x10(%rbp)
  400cae:	eb 3a                	jmp    400cea <main+0x226>
  400cb0:	8b 45 ec             	mov    -0x14(%rbp),%eax
  400cb3:	48 98                	cltq   
  400cb5:	48 c1 e0 03          	shl    $0x3,%rax
  400cb9:	48 03 45 d8          	add    -0x28(%rbp),%rax
  400cbd:	48 8b 00             	mov    (%rax),%rax
  400cc0:	8b 55 f0             	mov    -0x10(%rbp),%edx
  400cc3:	48 63 d2             	movslq %edx,%rdx
  400cc6:	48 c1 e2 02          	shl    $0x2,%rdx
  400cca:	48 01 c2             	add    %rax,%rdx
  400ccd:	b9 c9 39 40 00       	mov    $0x4039c9,%ecx
  400cd2:	48 8b 45 c8          	mov    -0x38(%rbp),%rax
  400cd6:	48 89 ce             	mov    %rcx,%rsi
  400cd9:	48 89 c7             	mov    %rax,%rdi
  400cdc:	b8 00 00 00 00       	mov    $0x0,%eax
  400ce1:	e8 ca fb ff ff       	callq  4008b0 <__isoc99_fscanf@plt>
  400ce6:	83 45 f0 01          	addl   $0x1,-0x10(%rbp)
  400cea:	8b 45 e4             	mov    -0x1c(%rbp),%eax
  400ced:	39 45 f0             	cmp    %eax,-0x10(%rbp)
  400cf0:	7c be                	jl     400cb0 <main+0x1ec>
  400cf2:	8b 45 ec             	mov    -0x14(%rbp),%eax
  400cf5:	48 98                	cltq   
  400cf7:	48 c1 e0 02          	shl    $0x2,%rax
  400cfb:	48 89 c2             	mov    %rax,%rdx
  400cfe:	48 03 55 d0          	add    -0x30(%rbp),%rdx
  400d02:	b9 cc 39 40 00       	mov    $0x4039cc,%ecx
  400d07:	48 8b 45 c8          	mov    -0x38(%rbp),%rax
  400d0b:	48 89 ce             	mov    %rcx,%rsi
  400d0e:	48 89 c7             	mov    %rax,%rdi
  400d11:	b8 00 00 00 00       	mov    $0x0,%eax
  400d16:	e8 95 fb ff ff       	callq  4008b0 <__isoc99_fscanf@plt>
  400d1b:	83 45 ec 01          	addl   $0x1,-0x14(%rbp)
  400d1f:	8b 45 e0             	mov    -0x20(%rbp),%eax
  400d22:	39 45 ec             	cmp    %eax,-0x14(%rbp)
  400d25:	7c 80                	jl     400ca7 <main+0x1e3>
  400d27:	48 8b 45 c8          	mov    -0x38(%rbp),%rax
  400d2b:	48 89 c7             	mov    %rax,%rdi
  400d2e:	e8 ad fb ff ff       	callq  4008e0 <fclose@plt>
  400d33:	48 8d 45 90          	lea    -0x70(%rbp),%rax
  400d37:	48 89 c7             	mov    %rax,%rdi
  400d3a:	e8 91 fc ff ff       	callq  4009d0 <ftime@plt>
  400d3f:	8b 55 e4             	mov    -0x1c(%rbp),%edx
  400d42:	8b 4d e0             	mov    -0x20(%rbp),%ecx
  400d45:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
  400d49:	89 ce                	mov    %ecx,%esi
  400d4b:	48 89 c7             	mov    %rax,%rdi
  400d4e:	e8 9d 01 00 00       	callq  400ef0 <make_normalize>
  400d53:	8b 7d e8             	mov    -0x18(%rbp),%edi
  400d56:	8b 4d e4             	mov    -0x1c(%rbp),%ecx
  400d59:	8b 55 e0             	mov    -0x20(%rbp),%edx
  400d5c:	f3 0f 10 4d f4       	movss  -0xc(%rbp),%xmm1
  400d61:	f3 0f 10 45 f8       	movss  -0x8(%rbp),%xmm0
  400d66:	48 8b 75 d0          	mov    -0x30(%rbp),%rsi
  400d6a:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
  400d6e:	41 89 f8             	mov    %edi,%r8d
  400d71:	48 89 c7             	mov    %rax,%rdi
  400d74:	e8 32 03 00 00       	callq  4010ab <supervised_gene_clustering>
  400d79:	48 8d 45 a0          	lea    -0x60(%rbp),%rax
  400d7d:	48 89 c7             	mov    %rax,%rdi
  400d80:	e8 4b fc ff ff       	callq  4009d0 <ftime@plt>
  400d85:	48 8b 55 a0          	mov    -0x60(%rbp),%rdx
  400d89:	48 8b 45 90          	mov    -0x70(%rbp),%rax
  400d8d:	48 89 d1             	mov    %rdx,%rcx
  400d90:	48 29 c1             	sub    %rax,%rcx
  400d93:	48 89 c8             	mov    %rcx,%rax
  400d96:	f2 48 0f 2a c0       	cvtsi2sd %rax,%xmm0
  400d9b:	f2 0f 10 0d 5d 2e 00 	movsd  0x2e5d(%rip),%xmm1        # 403c00 <__PRETTY_FUNCTION__.3988+0x20>
  400da2:	00 
  400da3:	f2 0f 59 c8          	mulsd  %xmm0,%xmm1
  400da7:	0f b7 45 a8          	movzwl -0x58(%rbp),%eax
  400dab:	0f b7 d0             	movzwl %ax,%edx
  400dae:	0f b7 45 98          	movzwl -0x68(%rbp),%eax
  400db2:	0f b7 c0             	movzwl %ax,%eax
  400db5:	89 d1                	mov    %edx,%ecx
  400db7:	29 c1                	sub    %eax,%ecx
  400db9:	89 c8                	mov    %ecx,%eax
  400dbb:	f2 0f 2a c0          	cvtsi2sd %eax,%xmm0
  400dbf:	f2 0f 58 c1          	addsd  %xmm1,%xmm0
  400dc3:	f2 0f 2c d0          	cvttsd2si %xmm0,%edx
  400dc7:	b8 d0 39 40 00       	mov    $0x4039d0,%eax
  400dcc:	89 d6                	mov    %edx,%esi
  400dce:	48 89 c7             	mov    %rax,%rdi
  400dd1:	b8 00 00 00 00       	mov    $0x0,%eax
  400dd6:	e8 25 fb ff ff       	callq  400900 <printf@plt>
  400ddb:	48 8b 45 d0          	mov    -0x30(%rbp),%rax
  400ddf:	48 89 c7             	mov    %rax,%rdi
  400de2:	e8 b9 fa ff ff       	callq  4008a0 <free@plt>
  400de7:	8b 55 e0             	mov    -0x20(%rbp),%edx
  400dea:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
  400dee:	89 d6                	mov    %edx,%esi
  400df0:	48 89 c7             	mov    %rax,%rdi
  400df3:	e8 03 2a 00 00       	callq  4037fb <realarray_deallocation>
  400df8:	c9                   	leaveq 
  400df9:	c3                   	retq   
头像
hoxily
帖子: 39
注册时间: 2011-02-11 21:10

Re: 如何查看二进制可执行文件的源码?

#3

帖子 hoxily » 2014-11-30 19:38

二进制可执行文件里不含源代码。用objdump命令反编译之后结果类似上面这样子,您需要汇编语言相关知识加以理解。
除了反汇编之外,您可以尝试联系资源发布者,向他提出查看源代码的请求。
moon_rui
帖子: 7
注册时间: 2014-11-30 17:57
系统: Ubuntu 14.04

Re: 如何查看二进制可执行文件的源码?

#4

帖子 moon_rui » 2014-11-30 20:11

哦,这么回事,谢谢楼上的大神
回复