oops分析工具

示例源代码



int main(){
	fstream fs;
	char*  buf = new char[100];
	fs.open("readme");
	if(!fs.is_open())
		cout<< "open file failed"<<endl;
    fs.getline(buf, 100);
       cout<< buf<<endl;
    fs.close();

}

objdump

如果是情况一,直接用地址dump出来。咱们回头看一下Backtrace信息:bdi_register+0xec/0x150,这里的0xec是偏移,而0x150是该函数的大小。用objdump默认可以获取整个vmlinux的代码,但是咱们其实只获取一部分,这个可以通过--start-address和--stop-address来指定。另外-d可以汇编代码,-S则可以并入源代码。

 显示来自目标 <文件> 的信息。
 至少必须给出以下选项之一:
  -a, --archive-headers    Display archive header information
  -f, --file-headers       Display the contents of the overall file header
  -p, --private-headers    Display object format specific file header contents
  -P, --private=OPT,OPT... Display object format specific contents
  -h, --[section-]headers  Display the contents of the section headers
  -x, --all-headers        Display the contents of all headers
  -d, --disassemble        Display assembler contents of executable sections
  -D, --disassemble-all    Display assembler contents of all sections
  -S, --source             Intermix source code with disassembly            源代码和汇编代码混合显示
  -s, --full-contents      Display the full contents of all sections requested
  -g, --debugging          Display debug information in object file
  -e, --debugging-tags     Display debug information using ctags style
  -G, --stabs              Display (in raw form) any STABS info in the file
  -W[lLiaprmfFsoRt] or
  --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
          =frames-interp,=str,=loc,=Ranges,=pubtypes,
          =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
          =addr,=cu_index]
                           Display DWARF info in the file
  -t, --syms               Display the contents of the symbol table(s)
  -T, --dynamic-syms       Display the contents of the dynamic symbol table
  -r, --reloc              Display the relocation entries in the file
  -R, --dynamic-reloc      Display the dynamic relocation entries in the file
  @<file>                  Read options from <file>
  -v, --version            Display this program's version number
  -i, --info               List object formats and architectures supported
  -H, --help               Display this informatio

-C :c++ 符号名逆向,可以显示出可读的C++符号名(最好的方式)

ll@ll-VirtualBox:~/mycode/c++/lession3$ objdump -SC a.out 
0000000000400ca6 <main>:
  400ca6:	55                   	push   %rbp
  400ca7:	48 89 e5             	mov    %rsp,%rbp
  400caa:	53                   	push   %rbx
  400cab:	48 81 ec 38 02 00 00 	sub    $0x238,%rsp
  400cb2:	64 48 8b 04 25 28 00 	mov    %fs:0x28,%rax
  400cb9:	00 00 
  400cbb:	48 89 45 e8          	mov    %rax,-0x18(%rbp)
  400cbf:	31 c0                	xor    %eax,%eax
  400cc1:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400cc8:	48 89 c7             	mov    %rax,%rdi
  400ccb:	e8 50 fe ff ff       	callq  400b20 <std::basic_fstream<char, std::char_traits<char> >::basic_fstream()@plt>
  400cd0:	bf 64 00 00 00       	mov    $0x64,%edi
  400cd5:	e8 b6 fd ff ff       	callq  400a90 <operator new[](unsigned long)@plt>
  400cda:	48 89 85 c8 fd ff ff 	mov    %rax,-0x238(%rbp)
  400ce1:	be 10 00 00 00       	mov    $0x10,%esi
  400ce6:	bf 08 00 00 00       	mov    $0x8,%edi
  400ceb:	e8 3a 01 00 00       	callq  400e2a <std::operator|(std::_Ios_Openmode, std::_Ios_Openmode)>
  400cf0:	89 c2                	mov    %eax,%edx
  400cf2:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400cf9:	be c4 0e 40 00       	mov    $0x400ec4,%esi
  400cfe:	48 89 c7             	mov    %rax,%rdi
  400d01:	e8 8a fe ff ff       	callq  400b90 <std::basic_fstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)@plt>
  400d06:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d0d:	48 89 c7             	mov    %rax,%rdi
  400d10:	e8 3b fe ff ff       	callq  400b50 <std::basic_fstream<char, std::char_traits<char> >::is_open()@plt>
  400d15:	83 f0 01             	xor    $0x1,%eax
  400d18:	84 c0                	test   %al,%al
  400d1a:	74 1c                	je     400d38 <main+0x92>
  400d1c:	be cb 0e 40 00       	mov    $0x400ecb,%esi
  400d21:	bf c0 20 60 00       	mov    $0x6020c0,%edi
  400d26:	e8 b5 fd ff ff       	callq  400ae0 <std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@plt>
  400d2b:	be 60 0b 40 00       	mov    $0x400b60,%esi
  400d30:	48 89 c7             	mov    %rax,%rdi
  400d33:	e8 08 fe ff ff       	callq  400b40 <std::ostream::operator<<(std::ostream& (*)(std::ostream&))@plt>
  400d38:	48 8b 8d c8 fd ff ff 	mov    -0x238(%rbp),%rcx
  400d3f:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d46:	ba 64 00 00 00       	mov    $0x64,%edx
  400d4b:	48 89 ce             	mov    %rcx,%rsi
  400d4e:	48 89 c7             	mov    %rax,%rdi
  400d51:	e8 aa fd ff ff       	callq  400b00 <std::istream::getline(char*, long)@plt>
  400d56:	48 8b 85 c8 fd ff ff 	mov    -0x238(%rbp),%rax
  400d5d:	48 89 c6             	mov    %rax,%rsi
  400d60:	bf c0 20 60 00       	mov    $0x6020c0,%edi
  400d65:	e8 76 fd ff ff       	callq  400ae0 <std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@plt>
  400d6a:	be 60 0b 40 00       	mov    $0x400b60,%esi
  400d6f:	48 89 c7             	mov    %rax,%rdi
  400d72:	e8 c9 fd ff ff       	callq  400b40 <std::ostream::operator<<(std::ostream& (*)(std::ostream&))@plt>
  400d77:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d7e:	48 89 c7             	mov    %rax,%rdi
  400d81:	e8 6a fd ff ff       	callq  400af0 <std::basic_fstream<char, std::char_traits<char> >::close()@plt>
  400d86:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d8d:	48 89 c7             	mov    %rax,%rdi
  400d90:	e8 7b fd ff ff       	callq  400b10 <std::basic_fstream<char, std::char_traits<char> >::~basic_fstream()@plt>
  400d95:	b8 00 00 00 00       	mov    $0x0,%eax
  400d9a:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
  400d9e:	64 48 33 0c 25 28 00 	xor    %fs:0x28,%rcx
  400da5:	00 00 
  400da7:	74 24                	je     400dcd <main+0x127>
  400da9:	eb 1d                	jmp    400dc8 <main+0x122>
  400dab:	48 89 c3             	mov    %rax,%rbx
  400dae:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400db5:	48 89 c7             	mov    %rax,%rdi
  400db8:	e8 53 fd ff ff       	callq  400b10 <std::basic_fstream<char, std::char_traits<char> >::~basic_fstream()@plt>
  400dbd:	48 89 d8             	mov    %rbx,%rax
  400dc0:	48 89 c7             	mov    %rax,%rdi
  400dc3:	e8 b8 fd ff ff       	callq  400b80 <_Unwind_Resume@plt>
  400dc8:	e8 63 fd ff ff       	callq  400b30 <__stack_chk_fail@plt>
  400dcd:	48 81 c4 38 02 00 00 	add    $0x238,%rsp
  400dd4:	5b                   	pop    %rbx
  400dd5:	5d                   	pop    %rbp
  400dd6:	c3                   	retq

objdump -S a.out 显示出汇编和C++的混合符号代码,不宜读,不推荐

0000000000400ca6 <main>:
  400ca6:	55                   	push   %rbp
  400ca7:	48 89 e5             	mov    %rsp,%rbp
  400caa:	53                   	push   %rbx
  400cab:	48 81 ec 38 02 00 00 	sub    $0x238,%rsp
  400cb2:	64 48 8b 04 25 28 00 	mov    %fs:0x28,%rax
  400cb9:	00 00 
  400cbb:	48 89 45 e8          	mov    %rax,-0x18(%rbp)
  400cbf:	31 c0                	xor    %eax,%eax
  400cc1:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400cc8:	48 89 c7             	mov    %rax,%rdi
  400ccb:	e8 50 fe ff ff       	callq  400b20 <_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev@plt>
  400cd0:	bf 64 00 00 00       	mov    $0x64,%edi
  400cd5:	e8 b6 fd ff ff       	callq  400a90 <_Znam@plt>
  400cda:	48 89 85 c8 fd ff ff 	mov    %rax,-0x238(%rbp)
  400ce1:	be 10 00 00 00       	mov    $0x10,%esi
  400ce6:	bf 08 00 00 00       	mov    $0x8,%edi
  400ceb:	e8 3a 01 00 00       	callq  400e2a <_ZStorSt13_Ios_OpenmodeS_>
  400cf0:	89 c2                	mov    %eax,%edx
  400cf2:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400cf9:	be c4 0e 40 00       	mov    $0x400ec4,%esi
  400cfe:	48 89 c7             	mov    %rax,%rdi
  400d01:	e8 8a fe ff ff       	callq  400b90 <_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@plt>
  400d06:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d0d:	48 89 c7             	mov    %rax,%rdi
  400d10:	e8 3b fe ff ff       	callq  400b50 <_ZNSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@plt>
  400d15:	83 f0 01             	xor    $0x1,%eax
  400d18:	84 c0                	test   %al,%al
  400d1a:	74 1c                	je     400d38 <main+0x92>
  400d1c:	be cb 0e 40 00       	mov    $0x400ecb,%esi
  400d21:	bf c0 20 60 00       	mov    $0x6020c0,%edi
  400d26:	e8 b5 fd ff ff       	callq  400ae0 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
  400d2b:	be 60 0b 40 00       	mov    $0x400b60,%esi
  400d30:	48 89 c7             	mov    %rax,%rdi
  400d33:	e8 08 fe ff ff       	callq  400b40 <_ZNSolsEPFRSoS_E@plt>
  400d38:	48 8b 8d c8 fd ff ff 	mov    -0x238(%rbp),%rcx
  400d3f:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d46:	ba 64 00 00 00       	mov    $0x64,%edx
  400d4b:	48 89 ce             	mov    %rcx,%rsi
  400d4e:	48 89 c7             	mov    %rax,%rdi
  400d51:	e8 aa fd ff ff       	callq  400b00 <_ZNSi7getlineEPcl@plt>
  400d56:	48 8b 85 c8 fd ff ff 	mov    -0x238(%rbp),%rax
  400d5d:	48 89 c6             	mov    %rax,%rsi
  400d60:	bf c0 20 60 00       	mov    $0x6020c0,%edi
  400d65:	e8 76 fd ff ff       	callq  400ae0 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
  400d6a:	be 60 0b 40 00       	mov    $0x400b60,%esi
  400d6f:	48 89 c7             	mov    %rax,%rdi
  400d72:	e8 c9 fd ff ff       	callq  400b40 <_ZNSolsEPFRSoS_E@plt>
  400d77:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d7e:	48 89 c7             	mov    %rax,%rdi
  400d81:	e8 6a fd ff ff       	callq  400af0 <_ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv@plt>
  400d86:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400d8d:	48 89 c7             	mov    %rax,%rdi
  400d90:	e8 7b fd ff ff       	callq  400b10 <_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev@plt>
  400d95:	b8 00 00 00 00       	mov    $0x0,%eax
  400d9a:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
  400d9e:	64 48 33 0c 25 28 00 	xor    %fs:0x28,%rcx
  400da5:	00 00 
  400da7:	74 24                	je     400dcd <main+0x127>
  400da9:	eb 1d                	jmp    400dc8 <main+0x122>
  400dab:	48 89 c3             	mov    %rax,%rbx
  400dae:	48 8d 85 d0 fd ff ff 	lea    -0x230(%rbp),%rax
  400db5:	48 89 c7             	mov    %rax,%rdi
  400db8:	e8 53 fd ff ff       	callq  400b10 <_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev@plt>
  400dbd:	48 89 d8             	mov    %rbx,%rax
  400dc0:	48 89 c7             	mov    %rax,%rdi
  400dc3:	e8 b8 fd ff ff       	callq  400b80 <_Unwind_Resume@plt>
  400dc8:	e8 63 fd ff ff       	callq  400b30 <__stack_chk_fail@plt>
  400dcd:	48 81 c4 38 02 00 00 	add    $0x238,%rsp
  400dd4:	5b                   	pop    %rbx
  400dd5:	5d                   	pop    %rbp
  400dd6:	c3                   	retq   

猜你喜欢

转载自blog.csdn.net/wwxxff28/article/details/81517596