Spørsmål:
Kan jeg definere egendefinert enum-type som skal brukes i Ghidra som datatype?
c00000fd
2019-04-11 11:42:13 UTC
view on stackexchange narkive permalink

Jeg prøver å lære Ghidra. Si, hvis den genererte følgende kode for å laste funksjoner fra en rekke funksjonsnavn fra gpfnCommCtrlAPI:

enter image description here

Jeg klarte å skrive gpfnCommCtrlAPI inn i char * [14] som gjorde det ganske lesbart:

enter image description here

Men da er det mulig å skrive inn g_pfnsUxCtrl på nytt, en peker til en rekke funksjonspekere (muligens med et tilpasset enum ) for å gjøre det til litt mer leselig? Her er et eksempel på hvordan det ser ut nå i tilfelle g_pfnsUxCtrl [7 ]:

enter image description here

PS. For å forstå hvilken indeks 7 refererer til i så fall må jeg gå tilbake til gpfnCommCtrlAPI array, som kanskje ikke er umiddelbart tilgjengelig der g_pfnsUxCtrl [7] kode> brukes.

PS2. I så fall omdøpte jeg manuelt p_comctl32_HandleScrollCmd variabel for å gjøre den mer lesbar.

Hvilken kjørbar fil analyserte du?
AiliunczdmCMT `comctrl32.dll` x86 build fra Win10.
det høres ut som om du vil ha en typedef hvis du vil at X skal bety g_pfnsUxCtrl [7] med mindre du vil bruke enum til å erstatte 7
En svar:
Erexo
2019-04-23 14:41:50 UTC
view on stackexchange narkive permalink

du kan legge til din egen enumtype i Data Type Manager . (Husk å velge riktig størrelse.).

enter image description here

enter image description here

enter image description here

Da bør du kunne endre typen til det nyopprettede enumet ditt, og alt skal løses pent.

ja, det er slik du definerer en generisk `enum`. Men hvordan vil du bruke det på det spesifikke eksemplet jeg viste ovenfor?
Hvis den proc-listen er relativt kort med antall konstanter og du virkelig ønsker tilpassede navn i stedet for heltall, kan du opprette en tilpasset type med mange heltall med forskjellige navn. Da har du et enkelt objekt med et par variabler, og hver av disse vil ha et tilpasset navn. Og hvis adressene er konstante, noe som er ganske dumt, men du kan se hvor du lander med det, kan du prøve å sette 'p_comct132_HandleScrollCmd` å enumType og `g_pfnsUxCtrl` for å peke på enumType. Begge løsningene er dumme, i ditt tilfelle vil jeg bare huske disse heltallene


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 4.0-lisensen den distribueres under.
Loading...