美文网首页程序的加载与链接
链接过程中关于数据段合并操作和访问

链接过程中关于数据段合并操作和访问

作者: 狼性刀锋 | 来源:发表于2020-06-22 15:45 被阅读0次

    链接过程中关于数据段合并操作和访问

    在链接多个.o文件的时候,第一件事事情要做的是合并相同的段,代码段合并,数据段合并。
    所以一直有个疑问,合并之后如何能够正确访问数据段,因为合并之后很明显数段段的地址和代码段的地址都发生了改变,那么不管采用何种方式,最终都无法正确定位数据段。

    先写个简单的Demo

    
    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface Beer : NSObject
    - (void)log ;
    @end
    
    NS_ASSUME_NONNULL_END
    
    
    #import "Beer.h"
    
    @implementation Beer
    
    - (void)log {
        NSLog(@"this is beer");
        NSLog(@"this is beer");
    }
    
    @end
    
    
    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface Water : NSObject
    - (void)log;
    @end
    
    NS_ASSUME_NONNULL_END
    
    
    #import "Water.h"
    
    @implementation Water
    
    - (void)log {
        NSLog(@"this water");
    }
    
    
    @end
    
    
    
    
    

    使用MachOView查看一下:

    发现 Relocations表中包含一下两个表:
    (_TEXT,_text) 代码段重定位表,该表中表示引用的字符串是需要重定位的
    (_DATA,_cfstring) 也需要重定位, 这个表示字符串本身也需要重定位

    那么结论很简单了,字符串的使用也是需要进行重定位的

    相关文章

      网友评论

        本文标题:链接过程中关于数据段合并操作和访问

        本文链接:https://www.haomeiwen.com/subject/wdgovctx.html