本文整理汇总了C++中cplus_demangle函数的典型用法代码示例。如果您正苦于以下问题:C++ cplus_demangle函数的具体用法?C++ cplus_demangle怎么用?C++ cplus_demangle使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cplus_demangle函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Demangled
std::string Demangled(const std::string& name)
{
std::string demangled;
demangling_styles style = auto_demangling;
if (name[0] == '_')
{
style = gnu_v3_demangling;
}
if (name[0] == '?')
{
// style = msvc_demangling;
}
#ifdef _MSC_VER
style = msvc_demangling; // TODO remove
#endif
cplus_demangle_set_style (style);
char* res = cplus_demangle (name.c_str(), DMGL_ANSI | DMGL_PARAMS);
if (res != 0)
{
demangled = res;
}
free(res);
return demangled;
}
示例2: demangle_it
static void
demangle_it (char *mangled_name)
{
char *result;
unsigned int skip_first = 0;
/* _ and $ are sometimes found at the start of function names
in assembler sources in order to distinguish them from other
names (eg register names). So skip them here. */
if (mangled_name[0] == '.' || mangled_name[0] == '$')
++skip_first;
if (strip_underscore && mangled_name[skip_first] == '_')
++skip_first;
result = cplus_demangle (mangled_name + skip_first, flags);
if (result == NULL)
printf ("%s", mangled_name);
else
{
if (mangled_name[0] == '.')
putchar ('.');
printf ("%s", result);
free (result);
}
}
示例3: my_demangle
const char *
my_demangle(const char *function_name) {
const char *tmp, *fn_copy;
#ifdef USE_CXA_DEMANGLE
extern char *__cxa_demangle(const char *, char *, size_t *, int *);
#endif
debug(DEBUG_FUNCTION, "my_demangle(name=%s)", function_name);
if (!d)
d = dict_init(dict_key2hash_string, dict_key_cmp_string);
tmp = dict_find_entry(d, (void *)function_name);
if (!tmp) {
fn_copy = strdup(function_name);
#ifdef HAVE_LIBIBERTY
tmp = cplus_demangle(function_name, DMGL_ANSI | DMGL_PARAMS);
#elif defined USE_CXA_DEMANGLE
int status = 0;
tmp = __cxa_demangle(function_name, NULL, NULL, &status);
#endif
if (!tmp)
tmp = fn_copy;
if (tmp)
dict_enter(d, (void *)fn_copy, (void *)tmp);
}
return tmp;
}
示例4: resolve
bool resolve(uint64_t ip, SP_Location &loc)
{
uint64_t vma = bfd_get_section_vma(m_abfd, m_text);
uint64_t size = bfd_get_section_size(m_text);
uint64_t offset = ip - vma;
if (ip < vma || ip > vma + size)
return false;
loc.ip = ip;
loc.module = m_path;
const char *sym, *file;
if (!bfd_find_nearest_line(m_abfd, m_text, m_syms, offset, &file, &sym, &loc.line))
return false;
loc.symbol = sym;
loc.file = file ? file : "";
char *demangled = cplus_demangle(sym, DMGL_AUTO);
if (demangled) {
loc.symbol = demangled;
free(demangled);
}
return true;
}
示例5: cplus_demangle
static char
*demangleSymbolCString(const char *mangled)
{
if(mangled[0]!='_') return NULL;
if(mangled[1]=='_') mangled++; // allow either __Z or _Z prefix
if(mangled[1]!='Z') return NULL;
return cplus_demangle(mangled, 0);
}
示例6: sp_rtrace_tracker_query_symbol
char* sp_rtrace_tracker_query_symbol(sp_rtrace_tracker_t* tracker, const char* name)
{
char* demangled_name = (char*)cplus_demangle(name, DMGL_ANSI | DMGL_PARAMS);
if (!tfind(demangled_name ? demangled_name : name, &tracker->symbols, (int (*)(const void *, const void *))_strcmpp)) {
return NULL;
}
return demangled_name ? demangled_name : strdup(name);
}
示例7: cplus_demangle
void BacktraceNames::Demangle()
{
char *f = cplus_demangle(Symbol, 0);
if(!f)
return;
Symbol = f;
free(f);
}
示例8: demangle
char *
demangle(const char *sym)
{
#ifdef HAVE_LIBBFD
string_var dem = cplus_demangle(sym, DMGL_ANSI|DMGL_PARAMS);
return (dem == 0 ? g_strdup(sym) : normalise_whitespace(dem));
#else
return g_strdup(sym);
#endif
}
示例9: cplus_demangle
const char *try_demangle(const char *mangled)
{
const char *demangled = cplus_demangle(mangled,
DMGL_GNU_V3 | DMGL_TYPES | DMGL_ANSI | DMGL_PARAMS);
if (demangled != NULL) {
return demangled;
} else {
return mangled;
}
}
示例10: demangle
char *
demangle (bfd *abfd, const char *name)
{
char *res, *alloc;
const char *pre, *suf;
size_t pre_len;
if (abfd != NULL && bfd_get_symbol_leading_char (abfd) == name[0])
++name;
/* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
or the MS PE format. These formats have a number of leading '.'s
on at least some symbols, so we remove all dots to avoid
confusing the demangler. */
pre = name;
while (*name == '.')
++name;
pre_len = name - pre;
alloc = NULL;
suf = strchr (name, '@');
if (suf != NULL)
{
alloc = xmalloc (suf - name + 1);
memcpy (alloc, name, suf - name);
alloc[suf - name] = '\0';
name = alloc;
}
res = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
if (res != NULL)
{
/* Now put back any suffix, or stripped dots. */
if (pre_len != 0 || suf != NULL)
{
size_t len;
size_t suf_len;
char *final;
if (alloc != NULL)
free (alloc);
len = strlen (res);
if (suf == NULL)
suf = res + len;
suf_len = strlen (suf) + 1;
final = xmalloc (pre_len + len + suf_len);
memcpy (final, pre, pre_len);
memcpy (final + pre_len, res, len);
memcpy (final + pre_len + len, suf, suf_len);
free (res);
res = final;
}
示例11: cplus_demangle
static char
*demangleSymbolCString(const char *mangled)
{
# if HAVE_CPLUS_DEMANGLE
if(mangled[0]!='_') return NULL;
if(mangled[1]=='_') mangled++; // allow either __Z or _Z prefix
if(mangled[1]!='Z') return NULL;
return cplus_demangle(mangled, 0);
# else
return NULL;
# endif
}
示例12: demangle_it
static void
demangle_it (char *mangled_name)
{
char *result;
/* For command line args, also try to demangle type encodings. */
result = cplus_demangle (mangled_name, flags | DMGL_TYPES);
if (result == NULL)
{
printf ("%s\n", mangled_name);
}
else
{
printf ("%s\n", result);
free (result);
}
}
示例13: main
int main(int argc, const char * argv[])
{
// insert code here...
atosl("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser",0x1000,0x80000);
atosl("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser",0x1000,0x80000);
atosl("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser",0x1000,0x80000);
std::cout << "Hello, World!\n";
char* s=cplus_demangle("_ZN7WebCore4Page8goToItemEPNS_11HistoryItemENS_13FrameLoadTypeE", 0);
symbolFile file;
file.open("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser");
s=file.find(0x80000);
s=file.find(0x80000);
s=file.find(0x80000);
file.close();
return 0;
}
示例14: demangle_new_symbols
static void
demangle_new_symbols (void)
{
symbol *sym;
while ((sym = symbol_pop ()) != NULL)
{
demangled *dem;
const char *p = cplus_demangle (sym->key, DMGL_PARAMS | DMGL_ANSI);
if (! p)
continue;
dem = demangled_hash_lookup (p, true);
dem->mangled = sym->key;
}
}
示例15: P_cplus_demangle
char * P_cplus_demangle( const char * symbol, bool nativeCompiler,
bool includeTypes)
{
int opts = 0;
opts = includeTypes ? DMGL_PARAMS | DMGL_ANSI : 0;
//opts |= nativeCompiler ? DMGL_AUTO : DMGL_GNU;
opts |= DMGL_GNU_V3;
char *demangled = cplus_demangle( const_cast<char *>( symbol ), opts);
if (demangled == NULL) return NULL;
//fprintf(stderr, "%s[%d]: cplus_demangle: %p: %s\n", __FILE__, __LINE__, current_demangling_style, libiberty_demanglers[0].demangling_style_name);
char *open_paren = strchr(demangled, '(');
if (open_paren)
*open_paren = '\0';
return demangled;
} /* end P_cplus_demangle() */