X86上汇编寻址方式总结

1 寄存器寻址

movl %eax, %edx    edx = eax;

将寄存器eax赋值给edx

2 立即数寻址

movl $0x123, %edx    edx = 0x123

将一个立即数放入寄存器

3 直接寻址

movl 0x123, %edx   edx =*(int32_t*)0x123

将一个立即数所指的地址中的内容放到寄存器

4 间接寻址

movl (%ebx), %edx  edx = *(int32_t*)ebx;

将一个寄存器内容(地址)所在的内容放到寄存器

5 变址寻址

movl 4(%ebx), %edx edx = *(int32_t*)(ebx+4);

在4的基础上加上偏移

b,w,l,q 分别代表8位,16位,32位和64位

一些常见命令举例:

0x000000000040062d <main+1>: mov %rsp,%rbp 

//rbp = rsp

0x0000000000400630 <main+4>: sub $0x10,%rsp

//rsp -= rsp - 0x10

0x0000000000400634 <main+8>: movl $0xa,-0xc(%rbp)

//*(rbp-0xc) = 0xa

0x000000000040063b <main+15>: lea -0xc(%rbp),%rax

//rax = rbp - 0xc.

0x000000000040063f <main+19>: mov %rax,-0x8(%rbp)

//(rbp-0x8) = rax

0x0000000000400643 <main+23>: mov -0x8(%rbp),%rax

//rax = *(rbp-0x8)

0x0000000000400647 <main+27>: movl $0xb,(%rax)

//*rax = 0xb

0x000000000040064d <main+33>: mov -0x8(%rbp),%rdx

//rdx = *(rbp-0x8)

0x0000000000400651 <main+37>: lea -0xc(%rbp),%rsi

//rsi = rbp - 0xc

10x080485ae <+14>: lea 0x18(%esp),%eax

//eax = esp + 0x18

0x080485b2 <+18>: add $0xf,%eax

//eax = eax + f

0x080485b5 <+21>: mov %eax,0x8(%esp)

//*(esp + 0x8) = eax

0x080485b9 <+25>: lea 0x18(%esp),%eax

//eax = esp + 0x18

.0x080485bd <+29>: mov %eax,0x4(%esp)

//*(esp + 0x4) = eax

.0x080485c1 <+33>: movl $0x80486b4,(%esp)

//*esp = 0x80486b4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一条叫做nemo的鱼

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值