Fråga:
Hur får man CPU-arkitekturen via Idapython?
langlauf.io
2015-11-25 15:54:27 UTC
view on stackexchange narkive permalink

Jag kunde inte hitta en API-funktion för att få CPU-arkitekturen för den laddade binären. I idaapi.py finns en funktion def set_processor_type (* args) men ingen motsvarighet som get_processor_type.

Jag vill inte gå tillbaka till att köra ytterligare ett (python) verktyg som fil, readelf eller en python ELF-parser. Jag gillar inte heller tanken på att analysera strängarna som visas i början av IDA-samlingslistan.

Det måste finnas ett sätt att använda idc.py , idaapi.py eller idautils.py för detta.

Ledsen för att jag återupplivade den här gamla tråden, men av skäl som jag inte kan ta reda på fungerar både info.is_64bit () och info.is_32bit () inte för mig. Jag använder IDA C ++ SDK v7.1. Även om den körbara filen i databasen är 64-bitars går den fortfarande igenom 32-bitarskontrollen. Har du någon aning om varför detta händer?
Om du har en ny fråga kan du ställa den genom att klicka på knappen [Ställ fråga] (https://reverseengineering.stackexchange.com/questions/ask). Inkludera en länk till den här frågan om det hjälper till att ge sammanhang. - [Från recension] (/ recension / inlägg av låg kvalitet / 15395)
Tre svar:
tmr232
2015-11-25 17:48:40 UTC
view on stackexchange narkive permalink

Du kan hämta namnet på processorn från idainfo struct:

  import idaapiinfo = idaapi.get_inf_structure () om info.is_64bit (): bits = 64elif info.is_32bit (): bits = 32else: bits = 16try: is_be = info.is_be () utom: is_be = info.mfendian = "stor" om is_be "lite" skriv ut 'Processor: {}, {} bit, {} endian'.format (info.procName, bits, endian) # Resultat: Processor: mipsr, 32bit, big endian  

Har fortfarande inte hittat endian.

EDIT: Endian kan bestämmas av processorns namn. Till exempel är mipsr stor endian och mipsrl är lite endian.

EDIT:
Lade till en korrekt endian-kontroll ( mf == MSB först). Baserat på detta svar.

REDIGERA:
Eftersom IDA7 beta 3 (170724) togs idainfo.mf bort och idainfo.is_be () måste användas. Baserat på keypatch

Steven D
2017-01-05 00:33:19 UTC
view on stackexchange narkive permalink

Inte allt processorns namn har endianinformation. Generellt kan den bestämmas som:

  BIG_ENDIAN om _idaapi.cvar.inf.mf annars LITTLE_ENDIAN  
w s
2015-11-25 16:14:46 UTC
view on stackexchange narkive permalink

Detta är definitivt inte exakt svar, men förmodligen kan du använda

  idaapi.ph_get_regnames () 

Returnerar listan över registrera namn som definierats i processormodulen

Olika plattformar har olika registeruppsättningar, och om du inte hittar din lösning om exakt cpu kan du prova. Den här funktionen finns i IDA 6.8 .



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 3.0-licensen som det distribueras under.
Loading...