我想hook打印一个函数中的参数,但是一旦打印就闪退

需求:我想打印

  • ( void )sendApplyContactRequest:(scoped_refptr_e1f85e48)arg1 presentingViewController:( id )arg2 fromChannel:( long long )arg3 reasonText:( id )arg4 completion:( id )arg5 ;
    函数中的arg1参数的类型以及内容,但是我一旦用id获取arg1然后NSLog(@“arg1 = %@”,arg1);,就会闪退。
    日志
    默认 07:59:59.000000 +0800 wework arg1 = 0x16fd2e7b0
    默认 07:59:59.000000 +0800 wework Trap a fatal signal: 11 [11, 0, 2]
    能打印%p,不能打印%@

https://stackoverflow.com/questions/31731233/what-do-and-ld-mean-in-objective-c

老哥,这话怎么理解哇,,我点进去看了看 没啥感悟。。

好像是说%@打印的是OC,%d打印int64什么的,,
难道是scoped_refptr_e1f85e48这个不是oc嘛

我该怎么打印这个参数呢:thinking:

怎么看出来这是oc的呢, 要不你再搜索下

https://www.google.com/search?Search&q=scoped_refptr_

嗯嗯应该不是OC,说是什么智能指针 只能在作用域有效,是不是在%orig内才有效呢,,

那我岂不是没办法打印了。

你先学学C++吧, C++都不会, 怎么逆向C++

老铁 我想打印下这个参数 以及自己构造这个参数 要在学学c++么:sob:

C++数组结构的内存布局你了解么, 知道一个C++对象在内存里怎么储存的么
scoped_refptr这东西google一下都有源码, 我再给你把源码贴出来
然而给你源码你也不会打印, 如果再来一个新类型你要怎么打印?

https://chromium.googlesource.com/chromium/src/+/master/base/memory/scoped_refptr.h#167

感谢老哥:hugs:

老哥请问这个问题解决了吗,怎么破的

这是c,我不会搞 放弃了

那就别打印,直接上lldb呗。

lldb 打印出来 也看不出啥名堂。

弄别的了,