[英]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.