ARM汇编(二)访存指令和实践

ARM访存指令:

访存:LDR 读内存,STR 写内存
    1、数据流向
    2、操作的寄存器和内存地址
    3、后续附加行为
LDR R1,[R0,#4]!   R0地址偏移4的值给R1,!为附加操作,执行完前面的操作后 把地址写入R0     R1 = [地址+偏移]的值  R0 = [地址+偏移]的地址

LDR R1,[R0] #4       R0地址的值给R1,R0 + 偏移4 的地址给R0     R1 = 值[地址]  R0 = 地址[地址] + 偏移

相当于进栈: STR R0,[SP,#-4]!
相当于出栈: LDR R1,[SP],#4

STR R0,[R1],#8             ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8]             ;将R0中的字数据写入以R1+8为地址的存储器中。”
STR     r1, [r0]                       ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中

LDR R0,=0x12345678    出现‘=’表示内存寻址
例如:
当前寄存器:
R0:B6EBB93C
R1:B86D1410

当前机器指令:
B6EBB940 04 70 A0 E3
指令:LDR R1,[R0,#4]! 
执行后:
R0:B6EBB940
R1:E3A07004 

实战:

1、写arm程序 hello.c:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef unsigned int uint32_t;

uint32_t x;
int main()
{	
	x = 0x12345678;
	while(1){

		printf("going...");
		getchar();
	}
	return 0;	
}

2、编写Android.mk

LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm #编译后的指令集 ARM指令
LOCAL_MODULE    := hello  	#模块名称
LOCAL_MODULE_FILENAME :=libhello
LOCAL_SRC_FILES := hello.c #源文件  .c或者.cpp
#LOCAL_LDLIBS += -llog #依赖库
include $(BUILD_EXECUTABLE)
#include $(BUILD_SHARED_LIBRARY) #指定编译文件的类型

3、编写Application.mk

APP_ABI := armeabi-v7a
APP_BUILD_SCRIPT :=Android.mk
APP_PLATFORM      :=android-16

4、生成

ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk

5、上传到手机运行,并超级权限下运行android_server

启动之后来到main函数处,找到x的地址和值

上图可以看出R2经过两次mov最后值为0x12345678 

STR R2,[R3] 就是将R2写入到R3记录的地址中。

R3 = B6FF44AC + 2B00  计算后为:B6FF6FAC

按G 跳转到 B6FF6FAC

这里的机器码为 B6FF7004 这就是变量X的地址。将0x12345678 写入到这个地址的值。按G 调到代码处:

存放的就是 0x12345678 ,静态分析时这里应该为????是没有值的。

本节内容为周壑ARM汇编内容观看笔记。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能-肥鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值