C++ name mangling by hand

 ̄綄美尐妖づ 提交于 2019-11-30 14:56:52

问题


I am writing a script for the IDA Pro disassembler in Python using the idapython plugin. Using this, I am able to fill in the gaps where IDA's auto-analysis falls short.

One area that has me stumped is naming locations/functions with (for want of a better term) "pretty names". An example of what I mean is illustrated below:

idapython and IDA Pro itself only allow me to enter basic C-ish function names. If I enter disallowed symbols (e.g. the scope resolution operator), they're replaced with underscores. However, if I enter a mangled name by hand (e.g. __ZN9IOService15powerChangeDoneEm), IDA Pro will prettify this for me.

Hence my question: how can I generate mangled names to pass through idapython? Is there a name-mangling library available? Is one available in Python? Is my only hope to tear the mangling functionality out of g++ and work around that?


回答1:


I finally got around to dig a little.

Unfortunately I could not find tool, I did find resources though.

If all you want is mangle names in the gcc3 fashion, then know that gcc3 use the Itanium C++ ABI, which has a standardized name mangling scheme. I found two documents:

  • The Itanium C++ ABI page
  • A Calling Convention PDF document, which describe the schemes of various compilers

For reference, both come from the Wikipedia page on Name Mangling.




回答2:


One simple (alebit hacky) method would be to compile a C++ file with the symbol you want in it, then extract the necessary symbols from the .o file's symbol table. With a bit of work this might be nicely scriptable.




回答3:


Here is an article that explains how mangling is done by Visual compiler. For mangling done by gcc, I think you can find the information in the source of the binutils package.




回答4:


You can use the Clang AST library, which has a MangleContext class.

http://clang.llvm.org/doxygen/classclang_1_1CodeGen_1_1MangleContext.html



来源:https://stackoverflow.com/questions/4667266/c-name-mangling-by-hand

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!