关于文件内存位置和offset的疑问

既然都说了处于内存中的位置 那么内存中的位置+上这个文件的偏移 就是实际要下断点的内存位置

而offset是说这个文件在内存中的偏移 实在没明白什么意思
在windows下 pe加载器加载了pe文件后 会读取pe格式 按照这个格式进行加载 一般默认为0x40000开始 放入主执行文件 那么这个文件在内存中的实际位置就是0x40000 若要下断点就从0x40000+模块的代码位置

而这个它已经说了模块处于内存中的某个位置了 但是实际要下断点 却要用offset+文件地址
难到是我对这个名字的理解有问题?

默认在0x40000放入主执行文件应该是ASLR出现以前的事情了,自从有了ASLR以后,可执行文件在内存中的位置就不一定是0x40000,一般每一次都会变,而我们此处所提到的offset,严格意义上来讲应该叫virtual memory address slide,正是由ASLR造成的。
因为上面说到的原因,这个文件在内存中的实际位置就不是0x40000,需要用“模块的代码位置”加上这个变化的“0x40000”,一般是通过动态调用gdb的命令“info sh”或者lldb的命令“image list -o”来得到的。至于你说的“模块的代码位置”,就是一个image的静态基地址,即用otool -tv或者ida看到的那个数值。
所以整体来说,一个image在内存中的实际地址就是通过分别得到2个数值后计算出来的,就像书上描写的那样。