2017-10-18 8 views
0

Je suis en train d'obtenir des valeurs d'argument d'une méthode d'appel:Comment simplifier la mémoire lu si je sais inscrire le nom

@selector(processEditingForTextStorage:edited:range:changeInLength:invalidatedRange:) 

Je sais comment les valeurs sont stockées:

  • RDX $ - premier argument
  • RCX $ - deuxième argument
  • $ r8 - troisième argument (NSRange.location 8 octets)
  • $ r9 - troisième argument (NSR ange.length 8 octets)
  • $ RBP + 0x10 - quatrième argument (NSUInteger)
  • 8 octets
  • $ RBP + 0x18 - cinquième argument (8 octets) NSRange.location
  • $ RBP + 0x20 - cinquième argument (NSRange.length 8 octets)

Est-ce correct?

Deuxième question est-il plus facile façon d'imprimer NSRange si je sais où les entiers sont stockés? Quelque chose comme "po * (NSUInteger *) ($ RBP + 0x20)"

J'obtiens l'erreur pour cela:

(lldb) po *(NSRange *)($rbp+0x18) 
error: incomplete type 'NSRange' (aka '_NSRange') where a complete type is required 
forward declaration of '_NSRange' 

obligé

(lldb) memory read --size 8 --format x --count 1 ($rbp+0x20) 
0x7fff5e348660: 0x0000000000000008 
(lldb) memory read --size 8 --format x --count 1 ($rbp+0x18) 
0x7fff5e348658: 0x000000000000000a 
(lldb) memory read --size 8 --format x --count 1 ($rsp+0x8) 
0x7fff5e348438: 0x000000000000000a 
(lldb) memory read --size 8 --format x --count 1 ($rsp+0x10) 
0x7fff5e348440: 0x0000000000000008 
+0

"po * (NSRange *) ($ RBP + 0x18)" - fonctionne très bien dans XCode 8.3.3. Xcode 9 beta ne l'aime pas. –

Répondre

1

Il y a des abréviations pour différentes commandes qui imitent GDB de commandes. L'un d'entre eux est x (pour "eXamine memory"), qui est l'abréviation de "memory read". Vous pouvez ajouter une barre oblique et des spécificateurs de format pour utiliser un format spécifique. Par exemple x/xg met en forme une valeur de 8 octets en hexadécimal. L'argument est une expression pour l'adresse à examiner.

Alors:

x/xg $rsp+0x10 
+0

Fonctionne! Merci .. –

+0

Toute entrée pour l'appel d'arguments? –

+0

Désolé, je ne comprends pas la question. Voulez-vous dire avez-vous les expressions correctes pour les différents arguments? Oui, je crois que c'est correct. –