Vraag:
Artefacten vergelijkbaar met "@ YAXPAX @" in geheugen en IDA-sessies
rekav0k
2013-07-01 20:03:23 UTC
view on stackexchange narkive permalink

Bij het omkeren van binaire bestanden en het ontleden van geheugen, kom ik vaak strings tegen zoals "@ YAXPAX @" die worden gebruikt om naar procedures te verwijzen. Is er een naam voor dit type conventie?

Ik geloof dat deze strings symboolreferenties zijn.

Vijf antwoorden:
PSS
2013-07-01 20:38:15 UTC
view on stackexchange narkive permalink

Ik denk dat dit vreemde spul naar voren komt door Name Mangling, het wordt ook wel name decoration genoemd. Name Mangling is een mechanisme dat door compilers wordt gebruikt om semantisch relevante informatie van compilers door te geven aan linkers.

Dit is hoe Wikipedia Name Mangling voor Visual C ++ serie compilers beschrijft:

Visual C ++ name mangling is een vervormd (decoratie) schema dat wordt gebruikt in Microsoft Visual C ++ - serie compilers. Het biedt een manier om de naam en aanvullende informatie over een functie, structuur, klasse of ander datatype te coderen om meer semantische informatie van de Microsoft Visual C ++ - compiler naar de linker door te geven. Visual Studio en de Windows SDK (die de compilers voor de opdrachtregel bevat) worden geleverd met het programma undname dat kan worden aangeroepen om het C-stijl-functieprototype te verkrijgen dat is gecodeerd in een verminkte naam. De onderstaande informatie is grotendeels reverse-engineered. Er is geen officiële documentatie voor het feitelijk gebruikte algoritme.

Dank je. Dit helpt veel. Ik zou stemmen, maar ik heb de reputatie niet.
Vitaly Osipov
2013-07-03 06:53:31 UTC
view on stackexchange narkive permalink

(Enigszins afwijkend van het onderwerp)

c ++ filt is een erg handig hulpprogramma voor het ontmangeren op Unix. Ik weet niet zeker of het ook beschikbaar is in Visual Studio, maar dit is een eenvoudige implementatie die u kunt compileren. Vergelijk uitgang (g ++, geen VC):

  $ nm a.out 0000000100001040 0000000100001048 _NXArgc S S _NXArgv 0000000100000d40 T __ZN6complxC1Edd 0000000100000d10 T __ZN6complxC2Edd 0000000100000d70 T __ZNK6complxplERKS_ 0000000100001058 0000000100000000 ___progname S T __mh_execute_header 0000000100001050 S _environ U _exit 0000000100000e20 T _main 0000000100001000 s _pvars U dyld_stub_binder 0000000100000cd0 T start  

Met c ++ filt:

  $ nm a.out | c ++ filt 0000000100001040 S _NXArgc 0000000100001048 S _NXArgv 0000000100000d40 T complx :: complx (dubbel, dubbel) 0000000100000d10 T complx :: complx (dubbel, dubbel) 0000000100000d70 T complx :: operator + (complx const&) const000100001058 S ___progex000 _000000000000000 _500000000 _0000000000000000000000000000000000000 _main 0000000100001000 korte _pvars U dyld_stub_binder 0000000100000cd0 T start  
ixje
2013-07-05 10:58:13 UTC
view on stackexchange narkive permalink

Een kleine tip voor het geval je het nog niet wist: je kunt de namen binnen IDA ontwarren via Opties -> Ontwarren namen .. .

Ik denk dat standaard de naam in de commentaren wordt afgebroken, maar je kunt dat ook wijzigen in de functienaam zelf. Neemt wat rommel weg!

blabb
2013-07-10 15:48:30 UTC
view on stackexchange narkive permalink

voor vc ++ naam ontwarren kunt u gebruiken

vc ++ filt

het is een kleine wrapper over dbghelp Function UnDecorateSymbolname () die de verminkte string en drukt ontwarde namen terug naar de console, zie hieronder voor een fragment

  ?? 3 @ YAXPAX @ Zvoid __cdecl operator delete (void *)? AFXSetTopLevelFrame @@ YAXPAVCFrameWnd @@@ Zvoid __cdecl AFXSetTopLevelFrame (klasse CFrameWnd *)  

fragment

  int _tmain (int argc, _TCHAR * argv []) {char buff [0x100]; UnDecorateSymbolName ("?? 3 @ YAXPAX @ Z", buff, 0xf0, UNDNAME_COMPLETE); printf ("% s \ n", buff); return 0;}  

output

  void __cdecl operator delete (void *)  
"undname.exe" is inbegrepen bij Visual Studio, er zijn geen extra tools nodig.
cb88
2013-07-03 19:38:10 UTC
view on stackexchange narkive permalink

Er is een robijnrode edelsteen die C ++ - namen ontmengt. Het ondersteunt GCC nog niet, maar wat je daar hebt is MSVC.

Je zou dit vrij snel in een robijnrode schoenen-app kunnen laten vallen met een naam unmangler gui.

Gebruik:

  vereist 'unmangler'puts Unmangler.unmangle "?? 3 @ YAXPAX @ Z" zet Unmangler.unmangle "? AFXSetTopLevelFrame @@ YAXPAVCFrameWnd @@@ Z" # output: # void __cdecl operator delete (void *) # void __cdecl AFXSetTopLevelFrame (klasse CFrameWnd *)  


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...