Fråga:
Kan jag definiera anpassad enum-typ som ska användas i Ghidra som datatyp?
c00000fd
2019-04-11 11:42:13 UTC
view on stackexchange narkive permalink

Jag försöker lära mig Ghidra. Säg, om den genererade följande kod för laddning av funktioner från en uppsättning funktionsnamn från gpfnCommCtrlAPI :

enter image description here

Jag kunde skriva om gpfnCommCtrlAPI till char * [14] vilket gjorde den ganska läsbar:

enter image description here

Men då är det möjligt att skriva om g_pfnsUxCtrl , en pekare till en uppsättning funktionspekare, (eventuellt med ett anpassat enum ) för att göra lite mer läsbar? Här är ett exempel på hur det ser ut nu när det gäller g_pfnsUxCtrl [7 ]:

enter image description here

PS. För att förstå vilket index 7 refererar till i så fall måste jag gå tillbaka till gpfnCommCtrlAPI -matrisen, som kanske inte är omedelbart tillgänglig där g_pfnsUxCtrl [7] kod> används.

PS2. I så fall bytte jag namn på p_comctl32_HandleScrollCmd variabel för att göra den mer läsbar.

Vilken körbar fil analyserade du?
@Biswapriyo: `comctrl32.dll` x86-byggnad från Win10.
det låter som om du vill ha en typedef om du vill att X ska betyda g_pfnsUxCtrl [7] om du inte vill använda enum för att ersätta 7
Ett svar:
Erexo
2019-04-23 14:41:50 UTC
view on stackexchange narkive permalink

du kan lägga till din egen enumtyp i Data Type Manager . (Tänk på att välja rätt storlek).

enter image description here

enter image description here

enter image description here

Då borde du kunna ändra typen till ditt nyskapade enum och allt ska lösas snyggt.

ja, det är så du definierar ett generiskt 'enum'. Men hur skulle du tillämpa det på det specifika exemplet jag visade ovan?
om den proc-listan är relativt kort med konstantal och du verkligen vill ha anpassade namn istället för heltal, kan du skapa en anpassad typ med många heltal med olika namn. Då har du ett enda objekt med några variabler och var och en av dessa kommer att ha ett anpassat namn. Och om dessa adresser är konstanta vilket är ganska dumt men du kan se var du landar med det kan du försöka ställa in 'p_comct132_HandleScrollCmd` att enumType och `g_pfnsUxCtrl` för att peka på enumType. Båda lösningarna är fåniga, i ditt fall skulle jag bara memorera dessa heltal


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 4.0-licensen som det distribueras under.
Loading...