繁体   English   中英

如何使用x86程序集操作字符串?

[英]How to manipulate strings with x86 assembly?

我正在编写一个汇编程序,该程序将两个字符串作为输入并将它们连接起来。 这是我所拥有的:( 使用NASM语法)

    SECTION .data
hello:  db "Hello ",0
world:  db "world!",0

    SECTION .text

; do the concatenation

由于以前从未在x86汇编中对字符串进行过任何处理,因此我需要首先了解如何存储和操作字符串。

我猜想一旦知道每个字符串的长度,那么连接将只涉及到移动内存块。 可以使用libc简化此部分。 (我可以使用strlen()strcat() 。)

我真正的问题是我对x86程序集中存储字符串的方式不熟悉。 他们只是被添加到堆栈中吗...? 他们会堆放在某个地方吗? 我应该使用malloc() (以某种方式)吗?

示例中的字符串的存储方式与C程序存储全局字符数组的方式相同。 它们只是可执行文件的data部分中的一系列字节。 如果要串联它们,则将需要一些空间来执行此操作-在堆栈上执行此操作,或调用malloc()获取一些内存。 如您所说,如果您愿意调用libc ,则可以只使用strcat() 这是我制作的一个简单示例(AT&T语法),使用全局缓冲区连接字符串,然后将其打印出来:

  .data
hello:
  .asciz "Hello "
world:
  .asciz "world!"
buffer:
  .space 100

  .text
  .globl _main
  .globl _puts
  .globl _strcat

_main:
  push  %rbp
  mov   %rsp, %rbp
  leaq  buffer(%rip), %rdi
  leaq  hello(%rip), %rsi
  callq _strcat
  leaq  buffer(%rip), %rdi
  leaq  world(%rip), %rsi
  callq _strcat
  leaq  buffer(%rip), %rdi
  callq _puts
  mov   $0, %rax
  pop   %rbp
  retq

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM