同问楼上, 楼主能补一下掉的那张图吗? 好像缺了点什么
函数指针的地址是在第 16 个字节之后,并占用 8 个字节,所以可以得到函数的地址是 0x00000001000dd770。 这是怎么算出来的。
block的结构就是这样的
不是,我是想问
memory read --size 8 --format x 0x16fd88f88
0x16fd88f88: 0x000000019b4d8088 0x00000000c2000000
0x16fd88f98: 0x00000001000dd770 0x0000000100fc6610
0x16fd88fa8: 0x000000017444c510 0x0000000000000001
0x16fd88fb8: 0x000000017444c510 0x0000000000000008
, 打印出这么毒配个地址, 怎么确定,函数的地址为0x00000001000dd770。 不太会算
加16字节啊
还是不懂,加16个字节怎么加啊, 基础太差了。 大佬,能教一下,是怎么加出来的吗?
你是不是不懂指针是什么
0x16fd88f88+0x10 = ?
大佬说的比较言简意赅,我来啰嗦两句。
memory read --size 8 --format x 0x16fd88f88
这句的意思是 从0x16fd88fdd 这个地址 读取内存中的值,每8个字节读一次,按照16进制输出。
0x16fd88fdd 地址对应的内存长这个样子
00001111,11110000,10101111,11111111…(这个我随便写的和输出结果不一一对应) 很多个连在一起的0和1(bit),每8个bit叫做一个字节 byte。从第一个00001111读8组出来。
也是够耐心的了
这个是我提取的某个库中的部分代码,用下就可以得到block的函数签名。按着函数签名就可以提取你要的东西了
- (id<NSObject>)addObserverForName:(NSNotificationName)name
object:(id)obj
queue:(NSOperationQueue *)queue
usingBlock:(void (^)(NSNotification *note))block;
我要hook这个方法 但是不知道 通过什么判断 是不是我要hook的那个block代码块
大佬真是又耐心又用心
lldb
br xxxx
一个一个看咯
当然也可以对block 进行分类,选择最有可能的进行一个一个调试
谢谢,终于看懂了
体现了学酥对学渣的友谊。
我想hook 这个方法里的block里的代码
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
// do something
// 我想hook它
}];
**chisel**这个
- (void)FM_GetSubscribeList:(long long)arg1 pageSize:(long long)arg2 callBack:(void (^)(long long, NSDictionary *, BOOL)arg3;
我想把 (void (^)(long long, NSDictionary *, BOOL)里面的 NSDictionary 打印出来,怎么做了?谢谢。 因为现在在 hook的代码里打印出来的是__NSStackBlock__,我想 block里的参数的详细信息打印出来
block有个隐藏参数,就是block自己,永远是x0