Spørgsmål:
IDA Pro: brug strukturer på parametre
sqrtsben
2013-11-20 18:57:47 UTC
view on stackexchange narkive permalink

Jeg har en lille funktion, der får en struct som parametre. struct ser ud til noget som dette:

  struct my_struct {short a; usigneret int b; usigneret int c;};  

Ved at passe på tilpasningen bygger jeg følgende struct i IDA:

  field_0 + 0x0field_1 + 0x4field_2 + 0x8  

Compileren bygger den, så den tager rbp + 0x10 som det første felt i struct , rbp + 0x14 som det andet og så videre. Problemet opstår nu, fordi hvis jeg forsøger at anvende den foruddefinerede IDA struct på instruktionerne, får jeg altid noget som [rbp + struct.field_0 + 0x10] . Dette bliver mere kompliceret, hvis der faktisk er noget i min struktur på + 0x10 , for så viser det bare [rbp + struct_fieldX] (hvilket er forkert).

Spørgsmålet er: Er der en måde at fortælle IDA (jeg bruger 6.3) at anvende struct med en forskydning på 0x10 ?

Det beskidte trick til denne enkle sag er at oprette en struct , der har 2 size_t dummy-felter til RIP og SFP , men det ser ikke ud til at være den rigtige vej her.

En svar:
Jason Geffner
2013-11-20 20:53:02 UTC
view on stackexchange narkive permalink

Tilføj din struct i funktionens stakvisning:

  1. Med din markør i funktionens demonteringsvisning skal du trykke på Ctrl + K for åbn stakvisningen.
  2. I stakvisningen skal du sikre dig, at der findes tilstrækkelige funktionsargumenter til mindst +00000010 i stakken. Brug D til at tilføje flere funktionsargumenter efter behov.
  3. Placer din markør på linjen +00000010 i stakvisningen, og tryk på Alt + Q for at specificere min_struktur ved denne forskydning.
Bemærk til vægt: I trin tre skal du ** være ** på stakvisningen. Hvis du placerer din markør på den tilsvarende lokale variabel i IDA-visning og trykker på 'Alt + Q', vil IDA forsøge at fortolke * indholdet af funktionen * som en struktur snarere end variablen, der ødelægger funktionen. Dette er en fejl, jeg ser folk lave temmelig ofte, når de lærer strukturer i IDA.


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...