1- use binaryninja:: architecture:: CoreArchitecture ;
2- use binaryninja:: binary_view:: BinaryView ;
3- use binaryninja:: demangle:: { CustomDemangler , Demangler } ;
4- use binaryninja:: rc:: Ref ;
1+ use binaryninja:: architecture:: { ArchitectureExt , CoreArchitecture } ;
2+ use binaryninja:: demangle:: { CustomDemangler , Demangler , DemanglerConfig , DemanglerResult } ;
53use binaryninja:: tracing:: TracingLogListener ;
64use binaryninja:: types:: { QualifiedName , Type } ;
75
@@ -12,15 +10,16 @@ impl CustomDemangler for TestDemangler {
1210 name == "test_name" || name == "test_name2"
1311 }
1412
15- fn demangle (
16- & self ,
17- _arch : & CoreArchitecture ,
18- name : & str ,
19- _view : Option < Ref < BinaryView > > ,
20- ) -> Option < ( QualifiedName , Option < Ref < Type > > ) > {
13+ fn demangle ( & self , name : & str , _config : & DemanglerConfig ) -> Option < DemanglerResult > {
2114 match name {
22- "test_name" => Some ( ( QualifiedName :: from ( vec ! [ "test_name" ] ) , Some ( Type :: bool ( ) ) ) ) ,
23- "test_name2" => Some ( ( QualifiedName :: from ( vec ! [ "test_name2" , "aaa" ] ) , None ) ) ,
15+ "test_name" => Some ( DemanglerResult :: new (
16+ QualifiedName :: from ( vec ! [ "test_name" ] ) ,
17+ Some ( Type :: bool ( ) ) ,
18+ ) ) ,
19+ "test_name2" => Some ( DemanglerResult :: new (
20+ QualifiedName :: from ( vec ! [ "test_name2" , "aaa" ] ) ,
21+ None ,
22+ ) ) ,
2423 _ => None ,
2524 }
2625 }
@@ -30,14 +29,18 @@ fn main() {
3029 tracing_subscriber:: fmt:: init ( ) ;
3130 let _listener = TracingLogListener :: new ( ) . register ( ) ;
3231
32+ tracing:: info!( "Registering demangler..." ) ;
33+ assert ! ( Demangler :: register( "Test" , TestDemangler ) ) ;
34+
3335 // This loads all the core architecture, platform, etc plugins
3436 let _headless_session =
3537 binaryninja:: headless:: Session :: new ( ) . expect ( "Failed to initialize session" ) ;
3638
37- tracing:: info!( "Registering demangler..." ) ;
38- Demangler :: register ( "Test" , TestDemangler ) ;
39-
4039 let placeholder_arch = CoreArchitecture :: by_name ( "x86_64" ) . expect ( "x86 exists" ) ;
40+ let platform = placeholder_arch
41+ . standalone_platform ( )
42+ . expect ( "x86 standalone platform exists" ) ;
43+ let config = DemanglerConfig :: for_platform ( & platform, false ) ;
4144
4245 for d in Demangler :: list ( ) . iter ( ) {
4346 tracing:: info!( "{}" , d. name( ) ) ;
@@ -46,17 +49,8 @@ fn main() {
4649 " \" __ZN1AC2Ei\" is mangled? {}" ,
4750 d. is_mangled_string( "__ZN1AC2Ei" )
4851 ) ;
49- tracing:: info!(
50- " \" __ZN1AC2Ei\" : {:?}" ,
51- d. demangle( & placeholder_arch, "__ZN1AC2Ei" , None )
52- ) ;
53- tracing:: info!(
54- " \" test_name\" : {:?}" ,
55- d. demangle( & placeholder_arch, "test_name" , None )
56- ) ;
57- tracing:: info!(
58- " \" test_name2\" : {:?}" ,
59- d. demangle( & placeholder_arch, "test_name2" , None )
60- ) ;
52+ tracing:: info!( " \" __ZN1AC2Ei\" : {:?}" , d. demangle( "__ZN1AC2Ei" , & config) ) ;
53+ tracing:: info!( " \" test_name\" : {:?}" , d. demangle( "test_name" , & config) ) ;
54+ tracing:: info!( " \" test_name2\" : {:?}" , d. demangle( "test_name2" , & config) ) ;
6155 }
6256}
0 commit comments