Ich versuche Argument Werte eines rufenden Methode zu erhalten:Wie in den Speicher lesen zu vereinfachen, wenn ich registrieren wissen Name
@selector(processEditingForTextStorage:edited:range:changeInLength:invalidatedRange:)
Ich weiß, wie Werte gespeichert werden:
- $ rdx - erstes Argument
- $ rcx - zweites Argument
- $ r8 - drittes Argument (NSRange.location 8bytes)
- $ r9 - drittes Argument (NSR ange.length 8bytes)
- $ rbp + 0x10 - vierte Argument (NSUInteger 8bytes)
- $ rbp + 0x18 - fünfte Argument (NSRange.location 8bytes)
- $ rbp + 0x20 - fünfte Argument (NSRange.length 8bytes)
Ist das korrekt?
Zweite Frage gibt es einfacher Weg, wie NSRange zu drucken, wenn ich weiß, wo ganze Zahlen gespeichert sind? So etwas wie "po * (NSUInteger *) ($ rbp + 0x20)"
ich Fehler dafür:
(lldb) po *(NSRange *)($rbp+0x18)
error: incomplete type 'NSRange' (aka '_NSRange') where a complete type is required
forward declaration of '_NSRange'
(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)" - arbeitet in XCode 8.3.3 Ordnung. Xcode 9 Beta mag es nicht. –