关于《iOS应用逆向与安全》第三章class-dump原理问题

如何根据Data的值获取到classname的字符串?书上的转换步骤有点不懂。



模块在文件中的偏移地址为0x18000

模块在内存中的地址为0x100000000

有点小白,这里自己总是不知道怎么算出来的。调试了class-dump的代码,但是看了它是用的OSReadLittleInt64([_data bytes], _offset); 这个方法直接读取了变量。还是不清楚是怎么算出来的。

@AloneMonkey

0x18000 + (0x100008fa0 - 0x100000000) = 0x20fa0

image

Data: 0x100008578

0x18000 + (0x100008578 - 0x100000000) = 0x20578

0x18000 + (0x100006c25 - 0x100000000) = 0x1EC25

书中问题:

P112 hopper把3210和3214当成了一个偏移来解析,解析出来的是偏移0x18处的loginButton属性,而3214对应的是偏移0x08处的属性,这个是怎么算(看)出来的呀。

请问下,你的第一个截图是哪个section的? 我好像都翻了一遍,没找到你这张截图在MachOView的位置。 今天翻了整个Executable(ARM64_ALL)查到有这个地址了。 但是想知道你的这个截图是哪里的?
另外,算出来0x20578后,这个0x6c25对应的不是0x20590处的地址吗?

今早自己想了下,是不是因为获取到的0x20578是整个结构体class_ro_t所在的地址,从这个地址排除前面变量的占位(uint32_t 的flags, instanceStart, instanceSize, reversed和uint8_t * ivarLayout) 总共占用位数是24个字节。然后name的位置就是0x20578+这些占用的空间位置得到的最终地址是0x20590。