(lldb) register read
General Purpose Registers:
rax = 0x0000000000000000
rbx = 0x0000000000000000
rcx = 0x0000000000007d0b
rdx = 0x00007fffb6e40860 @"Helvetica"
现在,我试图以多种方式更改其值-我试图在“expression”中创建一个NSString对象,并将其设置为$rdx:
(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
1: NSString *abc=@"Times";
2: $rdx=abc;
error: assigning to 'unsigned long' from incompatible type 'NSString *'
(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
1: NSString *abc=@"Times";
2: $rdx=(unsigned long)&abc;
(unsigned long) $110 = 123145406123008
现在,寄存器读取仅显示指针值,而不是NSString值
(lldb) register read
General Purpose Registers:
rax = 0x0000000000000000
rbx = 0x0000000000000000
rcx = 0x0000000000007d0b
rdx = 0x000070000e275d00
现在我知道我遗漏了一些东西,因为rdx的初始值指向NSString(0x00007fffb6e40860)-当从内存中读取它时,它指向另一个指针(7fffb3d721b8,它指向垃圾数据…)
(lldb) memory read 0x00007fffb6e40860
0x7fffb6e40860: b8 21 d7 b3 ff 7f 00 00 c8 07 00 00 00 00 00 00 ?!׳?...?.......
在将rdx分配给NSString指针后读取值时,它确实会显示字符串值:
(lldb) memory read 0x000070000f8a3d00
0x70000f8a3d00: 55 54 69 6d 65 73 00 00 00 00 00 00 00 00 00 00 UTimes..........
如果不够清楚,我的目标是设置rdx,这样它会显示如下内容:
(lldb) register read
General Purpose Registers:
rax = 0x0000000000000000
rbx = 0x0000000000000000
rcx = 0x0000000000007d0b
rdx = 0x00007fffb6e40860 @"Times"