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