文本段中的内存副本与原始内存不同

时间:2016-04-18 11:15:40

标签: ios memory arm instructions

在iOS中,我复制内存使用以下代码:

public OverlayView(Context context) {
    super(context);
    inflate(context, R.layout.overlay_view, this);
}


static WindowManager.LayoutParams createLayoutParams(int height) {
    final WindowManager.LayoutParams params =
            new WindowManager.LayoutParams(MATCH_PARENT, height, TYPE_SYSTEM_ERROR,
                      FLAG_NOT_FOCUSABLE
                    | FLAG_LAYOUT_IN_SCREEN
                    | FLAG_LAYOUT_NO_LIMITS
                    | FLAG_NOT_TOUCH_MODAL
                    | FLAG_LAYOUT_INSET_DECOR
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
                   , TRANSLUCENT);
    params.gravity = Gravity.TOP;

    return params;
}


public int retrieveScreenHeight() {
    int result = 0;

    WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);

    Point outSize = new Point();
    wm.getDefaultDisplay().getSize(outSize);
    if(outSize.y > outSize.x){
        result = outSize.y;
    }else{
        result = outSize.x;
    }

    return result;
}

其中memcpy(code, oriAddress , 100); 指向文本段(功能的地址)。我的问题是,oriAddress中的内存与代码中的内存不同。这是怎么发生的?

enter image description here

enter image description here

在arm指令ldrh执行之前,0x2a305ad4指向的值是0xb5f0。但是在执行ldrh之后,r0的值不是0xb5f0。

1 个答案:

答案 0 :(得分:0)

这是我的错。我将BreakPoint设置为地址,并且lldb更改地址指向的值。所以值是BreakPoint代码。