Spørgsmål:
Sådan anvendes IDA-struktur på en markør i en struktur
vincentleest
2015-07-29 01:19:52 UTC
view on stackexchange narkive permalink

Jeg har stødt på denne funktion, som accepterer en markør til, hvad jeg mener er en brugerdefineret C-struktur. Jeg kom til denne konklusion baseret på efterfølgende adgang til den.

  arg_0 = dword ptr 4; struct passed inpush ebxpush ebpmov ebp, [esp + 8 + arg_0]; gem pointer af struct i ebppush esipush edixor ebx, ebx  

og ikke alt for langt ovenfra ser jeg det befolket:

  mov [ebp + 0D4h], blmov [ebp + 0F4h], blmov [ebp + 114h], blxor eax, eaxmov [ebp + 0B8h], eaxmov [ebp + 0BCh], eaxmov [ebp + 0C0h], eax  

Jeg kender ikke størrelsen på strukturen, men jeg har set [ebp + 0f14h] . Derfor har jeg defineret en brugerdefineret IDA-struktur af størrelse 0xF14 . Nu har jeg problemer med at anvende denne brugerdefinerede struktur til denne markør. Jeg har prøvet Alt + Q og derefter valgt min egen brugerdefinerede struktur, men den fungerer ikke. I outputvinduet står Kommando "DeclareStructVar" mislykkedes

Min brugerdefinerede struktur:

  00000000 custom_sturct struc; (sizeof = 0xF14) 00000000 db? ; undefined00000001 db? ; undefined00000002 db? ; udefineret [... samme ting ...] 00000F11 db? ; undefined00000F12 db? ; undefined00000F13 field_F13 db? 00000F14 custom_sturct ends00000F14  

Jeg bruger IDA Pro 6.3

"men det fungerer ikke" - hvad "fungerer ikke"?
anvende strukturen til `ebp`.
Og redigerer du operand-typen for hver `mov [ebp + ...], ...` instruktion som beskrevet i https://www.hex-rays.com/products/ida/support/tutorials/structs.shtml?
Du kan ikke fortælle IDA "ebp er en strukturmarkør" og har hver instruktion, der bruger 'ebp', brugt strukturen automatisk. Du bliver nødt til at højreklikke på hver af forskydningerne, vælge "Strukturforskydning" i genvejsmenuen og derefter vælge dit felt "custom_struct". (Eller som 'genvej' brug 'T' -tasten).
@JasonGeffner og @GuntramBlohm tak begge for dine svar. Efter at have anvendt "T" -handlingen klagede IDA ikke. Den tilpassede struktur vises dog stadig ikke. Jeg indså derefter, at jeg gav `ebp`-registret et brugerdefineret navn. 'Custom_struct' dukkede op, efter at jeg har fjernet det brugerdefinerede navn til registret.
@GuntramBlohm, ønsker at oprette et nyt svar på dette fra din kommentar og min? Jeg er glad for, at du får den fulde kredit for denne;)
Du kan også prøve at bruge mit Autostruct-plugin. Det giver mulighed for at bruge 'Skift + T' til at konvertere flere forskydninger på én gang i stedet for at gøre det line be line. Dokumenter er [her] (https://sark.readthedocs.org/da/latest/plugins/autostruct.html), kode er tilgængelig [her] (https://github.com/tmr232/Sark). Jeg har ikke testet 6.3, men det skal fungere og spare tid.
For at tilføje til @GuntramBlohm's comment: Du kan også vælge et tekstområde og trykke på 't'. En anden menu vises, som giver dig mulighed for at vælge et register (vælg 'ebp') og en struktur (vælg 'custom_struct'), og det konverterer hver offset fra 'ebp' inden for markeringen til en forskydning af 'custom_struct'. Dette fungerer bedst i ** lineær visning **.
En svar:
NirIzr
2016-09-12 05:34:28 UTC
view on stackexchange narkive permalink

For at indstille register som en forskydning til en struktur i en sekvens af samlingskode skal du vælge denne sekvens og derefter trykke på T . En pop op-dialogboks kaldet "Strukturforskydninger" vises, hvor du kan levere registret og strukturere det peger på, og du vil se alle referencer IDA genkendt ved hjælp af det.

Lad os tage følgende kodestykke taget fra calc.exe for eksempel:

Example of initial state

Efter at have valgt den relevante kode og ramt T IDA identificerede vi automatisk ved at indstille ECX -registret foreslås mulige gyldige strukturer til venstre og forskydningerne og den valgte strukturs værdier.

Structure offsets dialog

Efter tildeling af en gyldig struktur ser koden sådan ud:

code after structure offset assignment

Bemærk følgende advarsler / bemærkninger:

  1. IDA ignorerede add ecx, 4 -linjen fuldstændigt og håndterede desuden ikke mov [ecx + eax * 2], dx for godt fordi af det. Hvis du rammer T for den specifikke linje og supplerer et ikke-nul forskudt delta, kan du håndtere det korrekt, omend manuelt.
  2. Som nævnt i kommentarerne deaktiverer manuel indstilling af et registers navn al IDA's repræsentation af registret og viser i stedet den bruger, der leveres fritekst. Dette betyder, at alle forskydningsdefinitioner vil blive skjult af ethvert brugerdefineret navn.
  3. Hvis du har set [ebp + 0f14h] , er strukturens størrelse mindst 0xF15 bytes, da strukturen skrives til ved forskydning 0x0F14 , hvilket betyder at mindst 0xF15 bytes er tilgængelige for den. Hvis du har set DWORD [ebp + 0f14h] , er strukturen mindst 0x0F18 bytes lang.

Disse advarsler er mindst delvis mildnet af tredjepartsværktøjer som Autostruktur



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...