x86汇编如何查看一个地址的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了x86汇编如何查看一个地址的值相关的知识,希望对你有一定的参考价值。

参考技术A 增加两个寄存器。
x86 寻址方式众多,什么直接寻址、间接寻址、基址寻址、基址变址寻址等等让人眼花缭乱,而 AT&T 语法对内存寻址方式做了一个很好section:displacement(base, index, scale),其中 section 是段地址,displacement 是位移,base 是基址寄存器,index 是索引,scale 是缩放因子,其计算方式为线性地址=section + displacement + base + index*scale,最重要的是,可以省略以上格式中的一个或多个部分,比如 movw 4, %ax 就是把内存地址 4 中的值移动到 ax 寄存器中,movw 4(%esp), %ax 就是把 esp+4 指向的地址中的值移动到 ax 寄存器中,依此类推。
①汇编指令后面跟有操作数长度的后缀,比如 mov 指令,如果操作数是 8 位,则用 movb,如果操作数是 16 位,则用 movw,如果操作数是 32 位,则用 movl,如果操作数是 64 位,则用 movq,其余指令依此类推。

第一个LED程序

1、简单的汇编知识

(1)LDR : 读内存

LDR R0, [R1]    : 假设R1的值为x,读取地址x上的数据(4字节),保存到R0中

 

(2)STR : 写内存命令

STR R0, [R1]  :  假设R1的值为x,把R0的值写到地址x (4字节)

 

(3)B : 跳转

 

(4)MOV

MOV R0, R1  :  把 R1的值赋给R0

也可以, MOV R0, #0x100   也就是R0等于0x100

 

(5)LDR R0, =0x12345678 (这里可以是任意值)   也就是R0等于0x12345678

这是一条伪指令,最终都会被拆分为几条指令。

另外,MOV R0, 0x12345678 是错误的,因为一条32位的ARM指令存MOV和R0,剩下的空间就不够存0x12345678了

 

以上是关于x86汇编如何查看一个地址的值的主要内容,如果未能解决你的问题,请参考以下文章

替代 x86 汇编“调用”指令?

如何在 x86 汇编中编写自己的 atoi 函数

GDB 问题 - 我如何逐行查看反汇编代码?

如何查看DLL中的函数信息

如何用汇编语言读取内存值

X86汇编层面的方法调用。