某行代码地址 = ASLR造成的偏移 + 本行代码在文件中的地址
imagelist:iamge list 与GDB中的”info shared”类似,用于列举当前进程中的所有模块(image).因为ASLR的关系,每次进程启动时候,同一进程的所有模块会在虚拟内存中的起始地址都会产生随机偏移
如:进程A中有一个模块B,B的模块大小是100字节,进程A第一次启动时,模块B可能会被加载到虚拟内存的0x00到oxC4,第二次启动会被加载到0x10到0x74,第三次启动会别加载到0x60到0xC4,也就是说它的大小虽然没变,但起始地址每次都在变化,而这个地址就是会频繁用到的一个关键数据—->获得这个数据的途径:LLDB启动后,输入”image list -o -f”命令
模块在内存中起始地址—> 模块基地址(image base adress)
NSLog的基地址 = NSLog在Foundation中的相对位置 + Foudation的基地址
公式推导:
偏移后模块基地址 = 偏移前模块基地址 + ALSR偏移
偏移后符号基地址 = 偏移前符号基地址 + 符号所在模块的ALSR偏移
偏移后指令基地址 = 偏移前符号基地址 + 指令所在模块的ALSR偏移