第23部分- Linux x86 64位汇编 字符串存储加载

第23部分- Linux x86 64位汇编 字符串存储加载

除了字符串从一个内存位置传送到另一个内存位置外,还有用于把内存中的字符串值加载到寄存器以及传会至内存位置中的指令。

lods

lods指令把内存中的字符串值传送到EAX寄存器中。

有多种格式:lodsb, lodsw, lodsl,lodsq

使用ESI寄存器作为隐藏的源操作数。

 

stos

STOS指令可以把EAX寄存器中的数据存放到一个内存位置中。

有STOSB,STOSW,STOSL,STOSQ。

使用EDI寄存器作为隐含的目标操作数。

 

加载示例

.extern printf ;//调用外部的printf函数
.section .data
space:
   .ascii "h"
oa:
   .byte 0x0a
end:
   .byte 0 
.section .bss
   .lcomm stobuffer, 256
.section .text
.globl _start
_start:
   nop
   leal space, %esi
   leal stobuffer, %edi
   movl $255, %ecx
   cld
   lodsb
   rep stosb

   leal oa, %esi
   lodsb
   stosb
   leal end, %esi
   lodsb
   lodsb
   
  movq $stobuffer,%rdi
  call printf

   movq $60,%rax
   syscall

as -g -o stostest.o stostest.s

ld -o stostest stostest.o -lc -I /lib64/ld-linux-x86-64.so.2

在这里打印的时候,需要注意的是由于引入了printf函数,该函数指向的buffer的指针是48位地址的bss地址,不是32位的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值