Make SourceLineResolver use RangeMap (#13). r=bryner
- Eliminate MemAddrMap from source_line_resolver.cc and adapt it to use RangeMap, also used by minidump.cc. - RangeMap operates on both a base address and a size, where MemAddrMap only used a base address, so the dumped symbol file format is modified to include size information. dump_syms produces these files and SourceLineResolver consumes them. - Provide updated test data conforming to the new dumped symbol format. http://groups.google.com/group/airbag-dev/browse_thread/thread/e9403cf3ad6336a1 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@21 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
6dd21d3baf
commit
cb9fd5b773
13 changed files with 8197 additions and 7572 deletions
|
@ -41,6 +41,7 @@ src_libairbag_la_SOURCES = \
|
|||
src/google/stack_frame.h \
|
||||
src/google/symbol_supplier.h \
|
||||
src/processor/crash_report_processor.cc \
|
||||
src/processor/linked_ptr.h \
|
||||
src/processor/memory_region.h \
|
||||
src/processor/minidump.cc \
|
||||
src/processor/minidump.h \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
|
@ -31,8 +31,6 @@
|
|||
|
||||
|
||||
|
||||
SOURCES = $(src_libairbag_la_SOURCES) $(src_processor_crash_report_processor_unittest_SOURCES) $(src_processor_minidump_dump_SOURCES) $(src_processor_minidump_stackwalk_SOURCES) $(src_processor_range_map_unittest_SOURCES) $(src_processor_source_line_resolver_unittest_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -293,6 +291,7 @@ src_libairbag_la_SOURCES = \
|
|||
src/google/stack_frame.h \
|
||||
src/google/symbol_supplier.h \
|
||||
src/processor/crash_report_processor.cc \
|
||||
src/processor/linked_ptr.h \
|
||||
src/processor/memory_region.h \
|
||||
src/processor/minidump.cc \
|
||||
src/processor/minidump.h \
|
||||
|
|
1621
aclocal.m4
vendored
1621
aclocal.m4
vendored
File diff suppressed because it is too large
Load diff
174
src/processor/linked_ptr.h
Normal file
174
src/processor/linked_ptr.h
Normal file
|
@ -0,0 +1,174 @@
|
|||
// Copyright (C) 2006 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// A "smart" pointer type with reference tracking. Every pointer to a
|
||||
// particular object is kept on a circular linked list. When the last pointer
|
||||
// to an object is destroyed or reassigned, the object is deleted.
|
||||
//
|
||||
// Used properly, this deletes the object when the last reference goes away.
|
||||
// There are several caveats:
|
||||
// - Like all reference counting schemes, cycles lead to leaks.
|
||||
// - Each smart pointer is actually two pointers (8 bytes instead of 4).
|
||||
// - Every time a pointer is assigned, the entire list of pointers to that
|
||||
// object is traversed. This class is therefore NOT SUITABLE when there
|
||||
// will often be more than two or three pointers to a particular object.
|
||||
// - References are only tracked as long as linked_ptr<> objects are copied.
|
||||
// If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS
|
||||
// will happen (double deletion).
|
||||
//
|
||||
// A good use of this class is storing object references in STL containers.
|
||||
// You can safely put linked_ptr<> in a vector<>.
|
||||
// Other uses may not be as good.
|
||||
//
|
||||
// Note: If you use an incomplete type with linked_ptr<>, the class
|
||||
// *containing* linked_ptr<> must have a constructor and destructor (even
|
||||
// if they do nothing!).
|
||||
|
||||
#ifndef PROCESSOR_LINKED_PTR_H__
|
||||
#define PROCESSOR_LINKED_PTR_H__
|
||||
|
||||
// This is used internally by all instances of linked_ptr<>. It needs to be
|
||||
// a non-template class because different types of linked_ptr<> can refer to
|
||||
// the same object (linked_ptr<Superclass>(obj) vs linked_ptr<Subclass>(obj)).
|
||||
// So, it needs to be possible for different types of linked_ptr to participate
|
||||
// in the same circular linked list, so we need a single class type here.
|
||||
//
|
||||
// DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr<T>.
|
||||
class linked_ptr_internal {
|
||||
public:
|
||||
// Create a new circle that includes only this instance.
|
||||
void join_new() {
|
||||
next_ = this;
|
||||
}
|
||||
|
||||
// Join an existing circle.
|
||||
void join(linked_ptr_internal const* ptr) {
|
||||
linked_ptr_internal const* p = ptr;
|
||||
while (p->next_ != ptr) p = p->next_;
|
||||
p->next_ = this;
|
||||
next_ = ptr;
|
||||
}
|
||||
|
||||
// Leave whatever circle we're part of. Returns true iff we were the
|
||||
// last member of the circle. Once this is done, you can join() another.
|
||||
bool depart() {
|
||||
if (next_ == this) return true;
|
||||
linked_ptr_internal const* p = next_;
|
||||
while (p->next_ != this) p = p->next_;
|
||||
p->next_ = next_;
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
mutable linked_ptr_internal const* next_;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class linked_ptr {
|
||||
public:
|
||||
typedef T element_type;
|
||||
|
||||
// Take over ownership of a raw pointer. This should happen as soon as
|
||||
// possible after the object is created.
|
||||
explicit linked_ptr(T* ptr = NULL) { capture(ptr); }
|
||||
~linked_ptr() { depart(); }
|
||||
|
||||
// Copy an existing linked_ptr<>, adding ourselves to the list of references.
|
||||
template <typename U> linked_ptr(linked_ptr<U> const& ptr) { copy(&ptr); }
|
||||
linked_ptr(linked_ptr const& ptr) { copy(&ptr); }
|
||||
|
||||
// Assignment releases the old value and acquires the new.
|
||||
template <typename U> linked_ptr& operator=(linked_ptr<U> const& ptr) {
|
||||
depart();
|
||||
copy(&ptr);
|
||||
return *this;
|
||||
}
|
||||
|
||||
linked_ptr& operator=(linked_ptr const& ptr) {
|
||||
if (&ptr != this) {
|
||||
depart();
|
||||
copy(&ptr);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Smart pointer members.
|
||||
void reset(T* ptr = NULL) { depart(); capture(ptr); }
|
||||
T* get() const { return value_; }
|
||||
T* operator->() const { return value_; }
|
||||
T& operator*() const { return *value_; }
|
||||
// Release ownership of the pointed object and returns it.
|
||||
// Sole ownership by this linked_ptr object is required.
|
||||
T* release() {
|
||||
bool last = link_.depart();
|
||||
T* v = value_;
|
||||
value_ = NULL;
|
||||
return v;
|
||||
}
|
||||
|
||||
bool operator==(T* p) const { return value_ == p; }
|
||||
bool operator!=(T* p) const { return value_ != p; }
|
||||
template <typename U>
|
||||
bool operator==(linked_ptr<U> const& ptr) const {
|
||||
return value_ == ptr.get();
|
||||
}
|
||||
template <typename U>
|
||||
bool operator!=(linked_ptr<U> const& ptr) const {
|
||||
return value_ != ptr.get();
|
||||
}
|
||||
|
||||
private:
|
||||
template <typename U>
|
||||
friend class linked_ptr;
|
||||
|
||||
T* value_;
|
||||
linked_ptr_internal link_;
|
||||
|
||||
void depart() {
|
||||
if (link_.depart()) delete value_;
|
||||
}
|
||||
|
||||
void capture(T* ptr) {
|
||||
value_ = ptr;
|
||||
link_.join_new();
|
||||
}
|
||||
|
||||
template <typename U> void copy(linked_ptr<U> const* ptr) {
|
||||
value_ = ptr->get();
|
||||
if (value_)
|
||||
link_.join(&ptr->link_);
|
||||
else
|
||||
link_.join_new();
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T> inline
|
||||
bool operator==(T* ptr, const linked_ptr<T>& x) {
|
||||
return ptr == x.get();
|
||||
}
|
||||
|
||||
template<typename T> inline
|
||||
bool operator!=(T* ptr, const linked_ptr<T>& x) {
|
||||
return ptr != x.get();
|
||||
}
|
||||
|
||||
// A function to convert T* into linked_ptr<T>
|
||||
// Doing e.g. make_linked_ptr(new FooBarBaz<type>(arg)) is a shorter notation
|
||||
// for linked_ptr<FooBarBaz<type> >(new FooBarBaz<type>(arg))
|
||||
template <typename T>
|
||||
linked_ptr<T> make_linked_ptr(T* ptr) {
|
||||
return linked_ptr<T>(ptr);
|
||||
}
|
||||
|
||||
#endif // PROCESSOR_LINKED_PTR_H__
|
|
@ -49,7 +49,7 @@ class RangeMap {
|
|||
|
||||
// Locates the range encompassing the supplied address. If there is
|
||||
// no such range, or if there is a parameter error, returns false.
|
||||
bool RetrieveRange(const AddressType& address, EntryType* entry);
|
||||
bool RetrieveRange(const AddressType& address, EntryType* entry) const;
|
||||
|
||||
// Empties the range map, restoring it to the state it was when it was
|
||||
// initially created.
|
||||
|
@ -125,7 +125,7 @@ bool RangeMap<AddressType, EntryType>::StoreRange(const AddressType& base,
|
|||
template<typename AddressType, typename EntryType>
|
||||
bool RangeMap<AddressType, EntryType>::RetrieveRange(
|
||||
const AddressType& address,
|
||||
EntryType* entry) {
|
||||
EntryType* entry) const {
|
||||
if (!entry)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
#include <utility>
|
||||
#include "processor/source_line_resolver.h"
|
||||
#include "google/stack_frame.h"
|
||||
#include "processor/linked_ptr.h"
|
||||
#include "processor/range_map.h"
|
||||
|
||||
using std::map;
|
||||
using std::vector;
|
||||
|
@ -27,62 +29,29 @@ using __gnu_cxx::hash;
|
|||
|
||||
namespace google_airbag {
|
||||
|
||||
// MemAddrMap is a map subclass which has the following properties:
|
||||
// - stores pointers to an "entry" type, which are deleted on destruction
|
||||
// - suitable for address lookup via FindContainingEntry
|
||||
|
||||
template<class T>
|
||||
class SourceLineResolver::MemAddrMap : public map<MemAddr, T*> {
|
||||
public:
|
||||
~MemAddrMap();
|
||||
|
||||
// Find the entry which "contains" a given relative address, that is,
|
||||
// the entry with the highest address not greater than the given address.
|
||||
// Returns NULL if there is no such entry.
|
||||
T* FindContainingEntry(MemAddr address) const;
|
||||
|
||||
private:
|
||||
typedef map<MemAddr, T*> MapType;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
SourceLineResolver::MemAddrMap<T>::~MemAddrMap() {
|
||||
typename MapType::iterator it;
|
||||
for (it = MapType::begin(); it != MapType::end(); ++it) {
|
||||
delete it->second;
|
||||
}
|
||||
}
|
||||
|
||||
template<class T>
|
||||
T* SourceLineResolver::MemAddrMap<T>::FindContainingEntry(
|
||||
MemAddr address) const {
|
||||
typename MapType::const_iterator it = MapType::lower_bound(address);
|
||||
if (it->first != address) {
|
||||
if (it == MapType::begin()) {
|
||||
// Nowhere to go, so no entry contains the address
|
||||
return NULL;
|
||||
}
|
||||
--it; // back up to the entry before address
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
|
||||
struct SourceLineResolver::Line {
|
||||
Line(MemAddr addr, int file_id, int source_line)
|
||||
: address(addr), source_file_id(file_id), line(source_line) { }
|
||||
Line(MemAddr addr, MemAddr code_size, int file_id, int source_line)
|
||||
: address(addr)
|
||||
, size(code_size)
|
||||
, source_file_id(file_id)
|
||||
, line(source_line) { }
|
||||
|
||||
MemAddr address;
|
||||
MemAddr size;
|
||||
int source_file_id;
|
||||
int line;
|
||||
};
|
||||
|
||||
struct SourceLineResolver::Function {
|
||||
Function(const string &function_name, MemAddr function_address)
|
||||
: name(function_name), address(function_address) { }
|
||||
Function(const string &function_name,
|
||||
MemAddr function_address,
|
||||
MemAddr code_size)
|
||||
: name(function_name), address(function_address), size(code_size) { }
|
||||
|
||||
string name;
|
||||
MemAddr address;
|
||||
MemAddrMap<Line> lines;
|
||||
MemAddr size;
|
||||
RangeMap<MemAddr, linked_ptr<Line> > lines;
|
||||
};
|
||||
|
||||
class SourceLineResolver::Module {
|
||||
|
@ -111,7 +80,7 @@ class SourceLineResolver::Module {
|
|||
|
||||
string name_;
|
||||
FileMap files_;
|
||||
MemAddrMap<Function> functions_;
|
||||
RangeMap<MemAddr, linked_ptr<Function> > functions_;
|
||||
};
|
||||
|
||||
SourceLineResolver::SourceLineResolver() : modules_(new ModuleMap) {
|
||||
|
@ -166,7 +135,8 @@ bool SourceLineResolver::Module::LoadMap(const string &map_file) {
|
|||
if (!cur_func) {
|
||||
return false;
|
||||
}
|
||||
functions_.insert(make_pair(cur_func->address, cur_func));
|
||||
functions_.StoreRange(cur_func->address, cur_func->size,
|
||||
linked_ptr<Function>(cur_func));
|
||||
} else {
|
||||
if (!cur_func) {
|
||||
return false;
|
||||
|
@ -175,7 +145,8 @@ bool SourceLineResolver::Module::LoadMap(const string &map_file) {
|
|||
if (!line) {
|
||||
return false;
|
||||
}
|
||||
cur_func->lines.insert(make_pair(line->address, line));
|
||||
cur_func->lines.StoreRange(line->address, line->size,
|
||||
linked_ptr<Line>(line));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -185,14 +156,14 @@ bool SourceLineResolver::Module::LoadMap(const string &map_file) {
|
|||
|
||||
void SourceLineResolver::Module::LookupAddress(MemAddr address,
|
||||
StackFrame *frame) const {
|
||||
Function *func = functions_.FindContainingEntry(address);
|
||||
if (!func) {
|
||||
linked_ptr<Function> func;
|
||||
if (!functions_.RetrieveRange(address, &func)) {
|
||||
return;
|
||||
}
|
||||
|
||||
frame->function_name = func->name;
|
||||
Line *line = func->lines.FindContainingEntry(address);
|
||||
if (!line) {
|
||||
linked_ptr<Line> line;
|
||||
if (!func->lines.RetrieveRange(address, &line)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -231,12 +202,17 @@ SourceLineResolver::Function* SourceLineResolver::Module::ParseFunction(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
char *size = strtok(NULL, " ");
|
||||
if (!size) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *name = strtok(NULL, "\r\n");
|
||||
if (!name) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return new Function(name, strtoull(addr, NULL, 16));
|
||||
return new Function(name, strtoull(addr, NULL, 16), strtoull(size, NULL, 16));
|
||||
}
|
||||
|
||||
SourceLineResolver::Line* SourceLineResolver::Module::ParseLine(
|
||||
|
@ -247,6 +223,11 @@ SourceLineResolver::Line* SourceLineResolver::Module::ParseLine(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
char *size = strtok(NULL, " ");
|
||||
if (!size) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *line_num_str = strtok(NULL, "\r\n");
|
||||
if (!line_num_str) {
|
||||
return NULL;
|
||||
|
@ -257,7 +238,10 @@ SourceLineResolver::Line* SourceLineResolver::Module::ParseLine(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
return new Line(strtoull(addr, NULL, 16), source_file, line_number);
|
||||
return new Line(strtoull(addr, NULL, 16),
|
||||
strtoull(size, NULL, 16),
|
||||
source_file,
|
||||
line_number);
|
||||
}
|
||||
|
||||
size_t SourceLineResolver::HashString::operator()(const string &s) const {
|
||||
|
|
BIN
src/processor/testdata/minidump2.dmp
vendored
BIN
src/processor/testdata/minidump2.dmp
vendored
Binary file not shown.
13122
src/processor/testdata/minidump2.sym
vendored
13122
src/processor/testdata/minidump2.sym
vendored
File diff suppressed because it is too large
Load diff
18
src/processor/testdata/module1.out
vendored
18
src/processor/testdata/module1.out
vendored
|
@ -1,12 +1,12 @@
|
|||
FILE 1 file1_1.cc
|
||||
FILE 2 file1_2.cc
|
||||
FILE 3 file1_3.cc
|
||||
FUNC 1000 Function1_1
|
||||
1000 44 1
|
||||
1004 45 1
|
||||
1008 46 1
|
||||
FUNC 1100 Function1_2
|
||||
1100 65 2
|
||||
1104 66 2
|
||||
FUNC 1200 Function1_3
|
||||
FUNC 1300 Function1_4
|
||||
FUNC 1000 c Function1_1
|
||||
1000 4 44 1
|
||||
1004 4 45 1
|
||||
1008 4 46 1
|
||||
FUNC 1100 8 Function1_2
|
||||
1100 4 65 2
|
||||
1104 4 66 2
|
||||
FUNC 1200 100 Function1_3
|
||||
FUNC 1300 100 Function1_4
|
||||
|
|
18
src/processor/testdata/module2.out
vendored
18
src/processor/testdata/module2.out
vendored
|
@ -1,12 +1,12 @@
|
|||
FILE 1 file2_1.cc
|
||||
FILE 2 file2_2.cc
|
||||
FILE 3 file2_3.cc
|
||||
FUNC 2000 Function2_1
|
||||
1000 54 1
|
||||
1004 55 1
|
||||
1008 56 1
|
||||
FUNC 2170 Function2_2
|
||||
2170 10 2
|
||||
2176 12 2
|
||||
217a 13 2
|
||||
2180 21 2
|
||||
FUNC 2000 c Function2_1
|
||||
1000 4 54 1
|
||||
1004 4 55 1
|
||||
1008 4 56 1
|
||||
FUNC 2170 14 Function2_2
|
||||
2170 6 10 2
|
||||
2176 4 12 2
|
||||
217a 6 13 2
|
||||
2180 4 21 2
|
||||
|
|
|
@ -23,7 +23,7 @@ using std::wstring;
|
|||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "Usage: %s <pdb file>", argv[0]);
|
||||
fprintf(stderr, "Usage: %s <pdb file>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -65,6 +65,12 @@ bool PDBSourceLineWriter::PrintLines(IDiaEnumLineNumbers *lines) {
|
|||
return false;
|
||||
}
|
||||
|
||||
DWORD length;
|
||||
if (FAILED(line->get_length(&length))) {
|
||||
fprintf(stderr, "failed to get line code length\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
DWORD source_id;
|
||||
if (FAILED(line->get_sourceFileId(&source_id))) {
|
||||
fprintf(stderr, "failed to get line source file id\n");
|
||||
|
@ -77,7 +83,7 @@ bool PDBSourceLineWriter::PrintLines(IDiaEnumLineNumbers *lines) {
|
|||
return false;
|
||||
}
|
||||
|
||||
fprintf(output_, "%x %d %d\n", rva, line_num, source_id);
|
||||
fprintf(output_, "%x %x %d %d\n", rva, length, line_num, source_id);
|
||||
line.Release();
|
||||
}
|
||||
return true;
|
||||
|
@ -113,7 +119,7 @@ bool PDBSourceLineWriter::PrintFunction(IDiaSymbol *function) {
|
|||
return false;
|
||||
}
|
||||
|
||||
fwprintf(output_, L"FUNC %x %s\n", rva, name);
|
||||
fwprintf(output_, L"FUNC %x %llx %s\n", rva, length, name);
|
||||
if (!PrintLines(lines)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1179,354 +1179,354 @@ FILE 1178 f:\rtm\public\sdk\inc\ddbanned.h
|
|||
FILE 1179 f:\rtm\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
|
||||
FILE 1180 f:\rtm\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
|
||||
FILE 1181 f:\rtm\public\sdk\inc\tvout.h
|
||||
FUNC 1000 main
|
||||
1000 24 172
|
||||
1039 25 172
|
||||
104a 26 172
|
||||
1065 27 172
|
||||
106f 31 172
|
||||
1092 32 172
|
||||
109b 33 172
|
||||
109d 36 172
|
||||
10a6 37 172
|
||||
10ed 38 172
|
||||
1105 39 172
|
||||
1120 42 172
|
||||
1139 43 172
|
||||
1140 44 172
|
||||
1142 47 172
|
||||
114b 48 172
|
||||
1161 49 172
|
||||
FUNC 1190 ATL::CComBSTR::~CComBSTR
|
||||
1190 1351 28
|
||||
1190 1352 28
|
||||
1199 1353 28
|
||||
FUNC 11a0 ATL::CComPtr<IDiaEnumSymbolsByAddr>::~CComPtr<IDiaEnumSymbolsByAddr>
|
||||
11a0 25 26
|
||||
11a0 26 26
|
||||
FUNC 11b0 airbag::PDBSourceLineWriter::Close
|
||||
11b0 212 26
|
||||
11b0 213 26
|
||||
11c4 214 26
|
||||
FUNC 11d0 airbag::PDBSourceLineWriter::PDBSourceLineWriter
|
||||
11d0 22 26
|
||||
11df 23 26
|
||||
FUNC 11e0 airbag::PDBSourceLineWriter::Open
|
||||
11e0 28 26
|
||||
1204 29 26
|
||||
1218 31 26
|
||||
1224 32 26
|
||||
123c 33 26
|
||||
123e 53 26
|
||||
1251 36 26
|
||||
1259 37 26
|
||||
127e 39 26
|
||||
1293 40 26
|
||||
12b0 53 26
|
||||
12c3 43 26
|
||||
12e6 44 26
|
||||
12eb 45 26
|
||||
12ed 48 26
|
||||
12fe 49 26
|
||||
1316 52 26
|
||||
1330 53 26
|
||||
FUNC 1350 airbag::PDBSourceLineWriter::PrintLines
|
||||
1350 55 26
|
||||
1379 58 26
|
||||
137f 61 26
|
||||
13bb 63 26
|
||||
13d4 69 26
|
||||
13ed 75 26
|
||||
1406 80 26
|
||||
1420 81 26
|
||||
1454 83 26
|
||||
146e 84 26
|
||||
1484 64 26
|
||||
1495 65 26
|
||||
14b4 70 26
|
||||
14c5 71 26
|
||||
14e4 76 26
|
||||
14e9 77 26
|
||||
FUNC 14f0 airbag::PDBSourceLineWriter::PrintFunction
|
||||
14f0 86 26
|
||||
1518 89 26
|
||||
151e 90 26
|
||||
1537 91 26
|
||||
154f 113 26
|
||||
1554 92 26
|
||||
155c 121 26
|
||||
1571 94 26
|
||||
1580 95 26
|
||||
1595 96 26
|
||||
15a5 121 26
|
||||
15ba 100 26
|
||||
15cb 101 26
|
||||
15d0 102 26
|
||||
15d5 106 26
|
||||
15e6 107 26
|
||||
15fb 108 26
|
||||
1608 111 26
|
||||
160c 112 26
|
||||
162e 113 26
|
||||
164b 116 26
|
||||
1664 117 26
|
||||
1675 118 26
|
||||
1695 120 26
|
||||
16ae 121 26
|
||||
FUNC 16d0 airbag::PDBSourceLineWriter::PrintSourceFiles
|
||||
16d0 123 26
|
||||
16f9 124 26
|
||||
16ff 125 26
|
||||
1716 126 26
|
||||
172e 134 26
|
||||
1746 127 26
|
||||
1748 162 26
|
||||
175c 130 26
|
||||
1760 132 26
|
||||
1781 133 26
|
||||
1799 142 26
|
||||
17b2 137 26
|
||||
17b6 139 26
|
||||
17fb 140 26
|
||||
17ff 141 26
|
||||
1822 144 26
|
||||
1826 145 26
|
||||
185b 147 26
|
||||
1874 151 26
|
||||
1878 152 26
|
||||
1896 156 26
|
||||
18ab 157 26
|
||||
18c2 158 26
|
||||
18ee 159 26
|
||||
1902 160 26
|
||||
194c 161 26
|
||||
198f 162 26
|
||||
19a3 142 26
|
||||
19d6 148 26
|
||||
19ed 153 26
|
||||
FUNC 1a00 airbag::PDBSourceLineWriter::PrintFunctions
|
||||
1a00 164 26
|
||||
1a27 165 26
|
||||
1a2d 166 26
|
||||
1a44 167 26
|
||||
1a5c 174 26
|
||||
1a74 168 26
|
||||
1a76 199 26
|
||||
1a88 171 26
|
||||
1a8c 172 26
|
||||
1aa9 173 26
|
||||
1ac1 174 26
|
||||
1ad7 178 26
|
||||
1af0 179 26
|
||||
1af5 180 26
|
||||
1b00 186 26
|
||||
1b19 190 26
|
||||
1b20 191 26
|
||||
1b30 195 26
|
||||
1b44 196 26
|
||||
1b67 198 26
|
||||
1b95 199 26
|
||||
1ba7 187 26
|
||||
1bac 188 26
|
||||
FUNC 1bc0 airbag::PDBSourceLineWriter::WriteMap
|
||||
1bc0 201 26
|
||||
1bc0 203 26
|
||||
1bcd 204 26
|
||||
1bdf 208 26
|
||||
1be8 210 26
|
||||
1beb 208 26
|
||||
1bef 209 26
|
||||
1bf2 210 26
|
||||
FUNC 1c02 __security_check_cookie
|
||||
1c02 52 1111
|
||||
1c02 55 1111
|
||||
1c08 56 1111
|
||||
1c0a 57 1111
|
||||
1c0c 59 1111
|
||||
FUNC 1c11 pre_cpp_init
|
||||
1c11 310 576
|
||||
1c11 312 576
|
||||
1c1b 322 576
|
||||
1c20 330 576
|
||||
1c4a 334 576
|
||||
1c53 335 576
|
||||
1c5b 337 576
|
||||
FUNC 1c5c __tmainCRTStartup
|
||||
1c5c 410 576
|
||||
1c68 433 576
|
||||
1c6d 458 576
|
||||
1c76 459 576
|
||||
1c7e 460 576
|
||||
1c8b 462 576
|
||||
1c8f 464 576
|
||||
1c95 465 576
|
||||
1c97 472 576
|
||||
1ca2 473 576
|
||||
1ca7 475 576
|
||||
1cb0 477 576
|
||||
1cba 479 576
|
||||
1cc3 481 576
|
||||
1cc9 483 576
|
||||
1cde 485 576
|
||||
1cef 493 576
|
||||
1cf5 499 576
|
||||
1cfe 501 576
|
||||
1d0f 502 576
|
||||
1d19 505 576
|
||||
1d1e 510 576
|
||||
1d26 521 576
|
||||
1d3d 523 576
|
||||
1d47 585 576
|
||||
1d54 586 576
|
||||
1d73 596 576
|
||||
1d7b 597 576
|
||||
1d82 603 576
|
||||
1d99 609 576
|
||||
1da1 616 576
|
||||
1dab 617 576
|
||||
1db2 619 576
|
||||
1dba 620 576
|
||||
1dc0 621 576
|
||||
1dc7 623 576
|
||||
1dcc 624 576
|
||||
FUNC 1dd2 pre_c_init
|
||||
1dd2 221 576
|
||||
1dd2 225 576
|
||||
1e32 233 576
|
||||
1e3f 241 576
|
||||
1e53 246 576
|
||||
1e61 247 576
|
||||
1e6f 254 576
|
||||
1e7b 261 576
|
||||
1e80 272 576
|
||||
1e85 279 576
|
||||
1e8e 280 576
|
||||
1e9a 283 576
|
||||
1e9f 287 576
|
||||
1ea8 289 576
|
||||
1eb1 292 576
|
||||
1eb3 293 576
|
||||
FUNC 1eb4 mainCRTStartup
|
||||
1eb4 393 576
|
||||
1eb4 400 576
|
||||
1eb9 402 576
|
||||
FUNC 1ebe __report_gsfailure
|
||||
1ebe 140 730
|
||||
1ec7 170 730
|
||||
1ecc 171 730
|
||||
1ed2 172 730
|
||||
1ed8 173 730
|
||||
1ede 174 730
|
||||
1ee4 175 730
|
||||
1eea 176 730
|
||||
1ef1 177 730
|
||||
1ef8 178 730
|
||||
1eff 179 730
|
||||
1f06 180 730
|
||||
1f0d 181 730
|
||||
1f14 182 730
|
||||
1f15 183 730
|
||||
1f1b 190 730
|
||||
1f1e 191 730
|
||||
1f23 192 730
|
||||
1f26 193 730
|
||||
1f2b 194 730
|
||||
1f2e 195 730
|
||||
1f33 201 730
|
||||
1f39 204 730
|
||||
1f43 206 730
|
||||
1f4d 285 730
|
||||
1f57 286 730
|
||||
1f61 293 730
|
||||
1f6c 294 730
|
||||
1f77 297 730
|
||||
1f82 298 730
|
||||
1f8a 302 730
|
||||
1f92 304 730
|
||||
1f9d 313 730
|
||||
1fa6 315 730
|
||||
1fae 319 730
|
||||
1fc0 320 730
|
||||
FUNC 1fc8 _onexit
|
||||
1fc8 79 481
|
||||
1fd4 84 481
|
||||
1fe6 86 481
|
||||
1feb 90 481
|
||||
1ff7 103 481
|
||||
1fff 105 481
|
||||
2003 107 481
|
||||
200e 108 481
|
||||
2019 110 481
|
||||
202c 112 481
|
||||
203c 113 481
|
||||
2049 115 481
|
||||
2055 120 481
|
||||
2058 121 481
|
||||
205e 117 481
|
||||
FUNC 2067 atexit
|
||||
2067 126 481
|
||||
2067 127 481
|
||||
2078 128 481
|
||||
FUNC 2079 _RTC_Initialize
|
||||
FUNC 209d _RTC_Terminate
|
||||
FUNC 20d0 _ValidateImageBase
|
||||
20d0 44 893
|
||||
20d0 50 893
|
||||
20db 52 893
|
||||
20dd 68 893
|
||||
20de 55 893
|
||||
20e3 56 893
|
||||
20e9 58 893
|
||||
20eb 62 893
|
||||
20f8 68 893
|
||||
FUNC 2100 _FindPESection
|
||||
2100 92 893
|
||||
2100 99 893
|
||||
2109 108 893
|
||||
2122 111 893
|
||||
2132 108 893
|
||||
213c 123 893
|
||||
2141 124 893
|
||||
FUNC 2142 _IsNonwritableInCurrentImage
|
||||
2142 152 893
|
||||
214e 159 893
|
||||
2152 167 893
|
||||
2160 169 893
|
||||
2162 177 893
|
||||
2167 178 893
|
||||
2170 179 893
|
||||
2172 181 893
|
||||
2174 188 893
|
||||
2188 190 893
|
||||
219f 196 893
|
||||
21a8 198 893
|
||||
FUNC 21bc __SEH_prolog4
|
||||
FUNC 2201 __SEH_epilog4
|
||||
FUNC 2215 _except_handler4
|
||||
FUNC 2238 _setdefaultprecision
|
||||
2238 30 1040
|
||||
2239 31 1040
|
||||
2260 32 1040
|
||||
FUNC 2261 _setargv
|
||||
2261 56 616
|
||||
2261 57 616
|
||||
2263 58 616
|
||||
FUNC 2264 __security_init_cookie
|
||||
2264 97 770
|
||||
226a 117 770
|
||||
228b 119 770
|
||||
2292 120 770
|
||||
2295 170 770
|
||||
229f 175 770
|
||||
22a5 178 770
|
||||
22ad 179 770
|
||||
22b5 180 770
|
||||
22bd 182 770
|
||||
22cd 187 770
|
||||
22cf 204 770
|
||||
22d3 206 770
|
||||
22da 209 770
|
||||
22de 211 770
|
||||
22e5 215 770
|
||||
22eb 216 770
|
||||
22f6 218 770
|
||||
FUNC 1000 187 main
|
||||
1000 39 24 172
|
||||
1039 11 25 172
|
||||
104a 1b 26 172
|
||||
1065 a 27 172
|
||||
106f 23 31 172
|
||||
1092 9 32 172
|
||||
109b 2 33 172
|
||||
109d 9 36 172
|
||||
10a6 47 37 172
|
||||
10ed 18 38 172
|
||||
1105 1b 39 172
|
||||
1120 19 42 172
|
||||
1139 7 43 172
|
||||
1140 2 44 172
|
||||
1142 9 47 172
|
||||
114b 16 48 172
|
||||
1161 26 49 172
|
||||
FUNC 1190 a ATL::CComBSTR::~CComBSTR
|
||||
1190 0 1351 28
|
||||
1190 9 1352 28
|
||||
1199 1 1353 28
|
||||
FUNC 11a0 f ATL::CComPtr<IDiaEnumSymbolsByAddr>::~CComPtr<IDiaEnumSymbolsByAddr>
|
||||
11a0 0 25 26
|
||||
11a0 f 26 26
|
||||
FUNC 11b0 15 airbag::PDBSourceLineWriter::Close
|
||||
11b0 0 212 26
|
||||
11b0 14 213 26
|
||||
11c4 1 214 26
|
||||
FUNC 11d0 10 airbag::PDBSourceLineWriter::PDBSourceLineWriter
|
||||
11d0 f 22 26
|
||||
11df 1 23 26
|
||||
FUNC 11e0 163 airbag::PDBSourceLineWriter::Open
|
||||
11e0 24 28 26
|
||||
1204 14 29 26
|
||||
1218 c 31 26
|
||||
1224 18 32 26
|
||||
123c 2 33 26
|
||||
123e 13 53 26
|
||||
1251 8 36 26
|
||||
1259 25 37 26
|
||||
127e 15 39 26
|
||||
1293 1d 40 26
|
||||
12b0 13 53 26
|
||||
12c3 23 43 26
|
||||
12e6 5 44 26
|
||||
12eb 2 45 26
|
||||
12ed 11 48 26
|
||||
12fe 18 49 26
|
||||
1316 1a 52 26
|
||||
1330 13 53 26
|
||||
FUNC 1350 19b airbag::PDBSourceLineWriter::PrintLines
|
||||
1350 29 55 26
|
||||
1379 6 58 26
|
||||
137f 3c 61 26
|
||||
13bb 19 63 26
|
||||
13d4 19 69 26
|
||||
13ed 19 75 26
|
||||
1406 1a 80 26
|
||||
1420 34 81 26
|
||||
1454 1a 83 26
|
||||
146e 16 84 26
|
||||
1484 11 64 26
|
||||
1495 1f 65 26
|
||||
14b4 11 70 26
|
||||
14c5 1f 71 26
|
||||
14e4 5 76 26
|
||||
14e9 2 77 26
|
||||
FUNC 14f0 1d3 airbag::PDBSourceLineWriter::PrintFunction
|
||||
14f0 28 86 26
|
||||
1518 6 89 26
|
||||
151e 19 90 26
|
||||
1537 18 91 26
|
||||
154f 5 113 26
|
||||
1554 8 92 26
|
||||
155c 15 121 26
|
||||
1571 f 94 26
|
||||
1580 15 95 26
|
||||
1595 10 96 26
|
||||
15a5 15 121 26
|
||||
15ba 11 100 26
|
||||
15cb 5 101 26
|
||||
15d0 5 102 26
|
||||
15d5 11 106 26
|
||||
15e6 15 107 26
|
||||
15fb d 108 26
|
||||
1608 4 111 26
|
||||
160c 22 112 26
|
||||
162e 1d 113 26
|
||||
164b 19 116 26
|
||||
1664 11 117 26
|
||||
1675 20 118 26
|
||||
1695 19 120 26
|
||||
16ae 15 121 26
|
||||
FUNC 16d0 326 airbag::PDBSourceLineWriter::PrintSourceFiles
|
||||
16d0 29 123 26
|
||||
16f9 6 124 26
|
||||
16ff 17 125 26
|
||||
1716 18 126 26
|
||||
172e 18 134 26
|
||||
1746 2 127 26
|
||||
1748 14 162 26
|
||||
175c 4 130 26
|
||||
1760 21 132 26
|
||||
1781 18 133 26
|
||||
1799 19 142 26
|
||||
17b2 4 137 26
|
||||
17b6 45 139 26
|
||||
17fb 4 140 26
|
||||
17ff 23 141 26
|
||||
1822 4 144 26
|
||||
1826 35 145 26
|
||||
185b 19 147 26
|
||||
1874 4 151 26
|
||||
1878 1e 152 26
|
||||
1896 15 156 26
|
||||
18ab 17 157 26
|
||||
18c2 2c 158 26
|
||||
18ee 14 159 26
|
||||
1902 4a 160 26
|
||||
194c 43 161 26
|
||||
198f 14 162 26
|
||||
19a3 33 142 26
|
||||
19d6 17 148 26
|
||||
19ed 9 153 26
|
||||
FUNC 1a00 1b1 airbag::PDBSourceLineWriter::PrintFunctions
|
||||
1a00 27 164 26
|
||||
1a27 6 165 26
|
||||
1a2d 17 166 26
|
||||
1a44 18 167 26
|
||||
1a5c 18 174 26
|
||||
1a74 2 168 26
|
||||
1a76 12 199 26
|
||||
1a88 4 171 26
|
||||
1a8c 1d 172 26
|
||||
1aa9 18 173 26
|
||||
1ac1 16 174 26
|
||||
1ad7 19 178 26
|
||||
1af0 5 179 26
|
||||
1af5 b 180 26
|
||||
1b00 19 186 26
|
||||
1b19 7 190 26
|
||||
1b20 10 191 26
|
||||
1b30 14 195 26
|
||||
1b44 23 196 26
|
||||
1b67 2e 198 26
|
||||
1b95 12 199 26
|
||||
1ba7 5 187 26
|
||||
1bac 5 188 26
|
||||
FUNC 1bc0 35 airbag::PDBSourceLineWriter::WriteMap
|
||||
1bc0 0 201 26
|
||||
1bc0 d 203 26
|
||||
1bcd 12 204 26
|
||||
1bdf 9 208 26
|
||||
1be8 3 210 26
|
||||
1beb 4 208 26
|
||||
1bef 3 209 26
|
||||
1bf2 3 210 26
|
||||
FUNC 1c02 f __security_check_cookie
|
||||
1c02 0 52 1111
|
||||
1c02 6 55 1111
|
||||
1c08 2 56 1111
|
||||
1c0a 2 57 1111
|
||||
1c0c 5 59 1111
|
||||
FUNC 1c11 4b pre_cpp_init
|
||||
1c11 0 310 576
|
||||
1c11 a 312 576
|
||||
1c1b 5 322 576
|
||||
1c20 2a 330 576
|
||||
1c4a 9 334 576
|
||||
1c53 8 335 576
|
||||
1c5b 1 337 576
|
||||
FUNC 1c5c 176 __tmainCRTStartup
|
||||
1c5c c 410 576
|
||||
1c68 5 433 576
|
||||
1c6d 9 458 576
|
||||
1c76 8 459 576
|
||||
1c7e d 460 576
|
||||
1c8b 4 462 576
|
||||
1c8f 6 464 576
|
||||
1c95 2 465 576
|
||||
1c97 b 472 576
|
||||
1ca2 5 473 576
|
||||
1ca7 9 475 576
|
||||
1cb0 a 477 576
|
||||
1cba 9 479 576
|
||||
1cc3 6 481 576
|
||||
1cc9 15 483 576
|
||||
1cde 11 485 576
|
||||
1cef 6 493 576
|
||||
1cf5 9 499 576
|
||||
1cfe 11 501 576
|
||||
1d0f a 502 576
|
||||
1d19 5 505 576
|
||||
1d1e 8 510 576
|
||||
1d26 17 521 576
|
||||
1d3d a 523 576
|
||||
1d47 d 585 576
|
||||
1d54 1f 586 576
|
||||
1d73 8 596 576
|
||||
1d7b 7 597 576
|
||||
1d82 17 603 576
|
||||
1d99 8 609 576
|
||||
1da1 a 616 576
|
||||
1dab 7 617 576
|
||||
1db2 8 619 576
|
||||
1dba 6 620 576
|
||||
1dc0 7 621 576
|
||||
1dc7 5 623 576
|
||||
1dcc 6 624 576
|
||||
FUNC 1dd2 e2 pre_c_init
|
||||
1dd2 0 221 576
|
||||
1dd2 60 225 576
|
||||
1e32 d 233 576
|
||||
1e3f 14 241 576
|
||||
1e53 e 246 576
|
||||
1e61 e 247 576
|
||||
1e6f c 254 576
|
||||
1e7b 5 261 576
|
||||
1e80 5 272 576
|
||||
1e85 9 279 576
|
||||
1e8e c 280 576
|
||||
1e9a 5 283 576
|
||||
1e9f 9 287 576
|
||||
1ea8 9 289 576
|
||||
1eb1 2 292 576
|
||||
1eb3 1 293 576
|
||||
FUNC 1eb4 a mainCRTStartup
|
||||
1eb4 0 393 576
|
||||
1eb4 5 400 576
|
||||
1eb9 5 402 576
|
||||
FUNC 1ebe 104 __report_gsfailure
|
||||
1ebe 9 140 730
|
||||
1ec7 5 170 730
|
||||
1ecc 6 171 730
|
||||
1ed2 6 172 730
|
||||
1ed8 6 173 730
|
||||
1ede 6 174 730
|
||||
1ee4 6 175 730
|
||||
1eea 7 176 730
|
||||
1ef1 7 177 730
|
||||
1ef8 7 178 730
|
||||
1eff 7 179 730
|
||||
1f06 7 180 730
|
||||
1f0d 7 181 730
|
||||
1f14 1 182 730
|
||||
1f15 6 183 730
|
||||
1f1b 3 190 730
|
||||
1f1e 5 191 730
|
||||
1f23 3 192 730
|
||||
1f26 5 193 730
|
||||
1f2b 3 194 730
|
||||
1f2e 5 195 730
|
||||
1f33 6 201 730
|
||||
1f39 a 204 730
|
||||
1f43 a 206 730
|
||||
1f4d a 285 730
|
||||
1f57 a 286 730
|
||||
1f61 b 293 730
|
||||
1f6c b 294 730
|
||||
1f77 b 297 730
|
||||
1f82 8 298 730
|
||||
1f8a 8 302 730
|
||||
1f92 b 304 730
|
||||
1f9d 9 313 730
|
||||
1fa6 8 315 730
|
||||
1fae 12 319 730
|
||||
1fc0 2 320 730
|
||||
FUNC 1fc8 9f _onexit
|
||||
1fc8 c 79 481
|
||||
1fd4 12 84 481
|
||||
1fe6 5 86 481
|
||||
1feb c 90 481
|
||||
1ff7 8 103 481
|
||||
1fff 4 105 481
|
||||
2003 b 107 481
|
||||
200e b 108 481
|
||||
2019 13 110 481
|
||||
202c 10 112 481
|
||||
203c d 113 481
|
||||
2049 c 115 481
|
||||
2055 3 120 481
|
||||
2058 6 121 481
|
||||
205e 9 117 481
|
||||
FUNC 2067 12 atexit
|
||||
2067 0 126 481
|
||||
2067 11 127 481
|
||||
2078 1 128 481
|
||||
FUNC 2079 24 _RTC_Initialize
|
||||
FUNC 209d 24 _RTC_Terminate
|
||||
FUNC 20d0 29 _ValidateImageBase
|
||||
20d0 0 44 893
|
||||
20d0 b 50 893
|
||||
20db 2 52 893
|
||||
20dd 1 68 893
|
||||
20de 5 55 893
|
||||
20e3 6 56 893
|
||||
20e9 2 58 893
|
||||
20eb d 62 893
|
||||
20f8 1 68 893
|
||||
FUNC 2100 42 _FindPESection
|
||||
2100 0 92 893
|
||||
2100 9 99 893
|
||||
2109 19 108 893
|
||||
2122 10 111 893
|
||||
2132 a 108 893
|
||||
213c 5 123 893
|
||||
2141 1 124 893
|
||||
FUNC 2142 6c _IsNonwritableInCurrentImage
|
||||
2142 c 152 893
|
||||
214e 4 159 893
|
||||
2152 e 167 893
|
||||
2160 2 169 893
|
||||
2162 5 177 893
|
||||
2167 9 178 893
|
||||
2170 2 179 893
|
||||
2172 2 181 893
|
||||
2174 14 188 893
|
||||
2188 17 190 893
|
||||
219f 9 196 893
|
||||
21a8 6 198 893
|
||||
FUNC 21bc 45 __SEH_prolog4
|
||||
FUNC 2201 14 __SEH_epilog4
|
||||
FUNC 2215 23 _except_handler4
|
||||
FUNC 2238 29 _setdefaultprecision
|
||||
2238 1 30 1040
|
||||
2239 27 31 1040
|
||||
2260 1 32 1040
|
||||
FUNC 2261 3 _setargv
|
||||
2261 0 56 616
|
||||
2261 2 57 616
|
||||
2263 1 58 616
|
||||
FUNC 2264 94 __security_init_cookie
|
||||
2264 6 97 770
|
||||
226a 21 117 770
|
||||
228b 7 119 770
|
||||
2292 3 120 770
|
||||
2295 a 170 770
|
||||
229f 6 175 770
|
||||
22a5 8 178 770
|
||||
22ad 8 179 770
|
||||
22b5 8 180 770
|
||||
22bd 10 182 770
|
||||
22cd 2 187 770
|
||||
22cf 4 204 770
|
||||
22d3 7 206 770
|
||||
22da 4 209 770
|
||||
22de 7 211 770
|
||||
22e5 6 215 770
|
||||
22eb b 216 770
|
||||
22f6 2 218 770
|
||||
|
|
Loading…
Reference in a new issue