在网上下载了一个用C语言编写的算法程序,解压后是一个二进制可执行文件,
我想得到该算法的源代码,应该如何操作呢?
本人新手,求各位大神指教。
注:附件为该算法文件
如何查看二进制可执行文件的源码?
-
- 帖子: 7
- 注册时间: 2014-11-30 17:57
- 系统: Ubuntu 14.04
如何查看二进制可执行文件的源码?
- 附件
-
- frsac.gz
- (7.93 KiB) 已下载 72 次
- hoxily
- 帖子: 39
- 注册时间: 2011-02-11 21:10
Re: 如何查看二进制可执行文件的源码?
截取了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: 如何查看二进制可执行文件的源码?
二进制可执行文件里不含源代码。用objdump命令反编译之后结果类似上面这样子,您需要汇编语言相关知识加以理解。
除了反汇编之外,您可以尝试联系资源发布者,向他提出查看源代码的请求。
除了反汇编之外,您可以尝试联系资源发布者,向他提出查看源代码的请求。
-
- 帖子: 7
- 注册时间: 2014-11-30 17:57
- 系统: Ubuntu 14.04
Re: 如何查看二进制可执行文件的源码?
哦,这么回事,谢谢楼上的大神