这个问题问的是同样的事情,但是当我尝试时:
typedef long long ptr_t;
objc$target:NSWindow:-setTitle?:entry
{
printf( "%30s %10s %x %x %x\n", probemod, probefunc, arg0, arg1, arg2 );
this->str = *(ptr_t*)copyin(arg2+2*sizeof(ptr_t), sizeof(ptr_t));
printf("string addr = %p\n", this->str);
printf("string val = %s\n", copyinstr(this->str));
}
它没有用。arg2 应该是 NSString 的地址。我有:
NSWindow -setTitle: 100685240 7fff92d82f73 7fff78a6eb80 string addr = 7fff8e7e83b9 string val=Window dtrace: 启用探针 ID 5 上的错误 (ID 35737: objc9434:NSWindow:-setTitle::entry): 无效地址 (0x6c007400690074) 在 DIF 偏移量 #8 24
您可以假设 NSString 的 MacRoman 或 ASCII 编码 - 基本上无需担心复杂的(从 DTrace 角度来看)编码。