在 Linux IA-32 汇编器 (gas) 上创建子字符串
我想从我的原始字符串(thestring)中创建一个由 3 个 asciz 字符组成的子字符串(ministring)。 该东西在运行时不会打印,所以我不知道我到底在做什么。 为什么不打印? 我是否正确创建了迷你字符串?
.section .data
thestring: .asciz "111010101"
ministring: .asciz ""
formatd: .asciz "%d"
formats: .asciz "%s"
formatc: .asciz "%c"
.section .text
.globl _start
_start:
xorl %ecx, %ecx
ciclo:movb thestring(%ecx,1), %al
movzbl %al, %eax
movl %eax, ministring(%ecx,1)
incl %ecx
cmpl $3, %ecx
jl ciclo
movl thestring, %eax
pushl %eax
pushl $formats
call printf
addl $4, %esp
movl $1, %eax
movl $0, %ebx
int $0x80
I wanna create a substring (ministring) of 3 asciz chars out of my original (thestring). The thing ain't printing when being run so I don't know what the hell I'm I doing. Why it ain't printing? Am I creating the ministring correctly?
.section .data
thestring: .asciz "111010101"
ministring: .asciz ""
formatd: .asciz "%d"
formats: .asciz "%s"
formatc: .asciz "%c"
.section .text
.globl _start
_start:
xorl %ecx, %ecx
ciclo:movb thestring(%ecx,1), %al
movzbl %al, %eax
movl %eax, ministring(%ecx,1)
incl %ecx
cmpl $3, %ecx
jl ciclo
movl thestring, %eax
pushl %eax
pushl $formats
call printf
addl $4, %esp
movl $1, %eax
movl $0, %ebx
int $0x80
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您没有保留足够的内存空间来包含您正在创建的以空结尾的迷你字符串...因此,当您写入此内存时,您将覆盖 formatd 和formats 的值(因此您最终会通过printf 中除“%s”之外的其他内容)。
不要使用您对迷你字符串内存位置的定义,而是尝试使用以下内容:
另外,而不是这个:
我不明白为什么您不使用这个:
另外,如果您想打印迷你字符串,则不要使用这个:
这样做:
也可以代替这个:
为什么不这样做:
另外,我建议您使用调试器来:
You haven't reserved enough memory space to contain the null-terminated ministring which you're creating ... therefore, when you write to this memory, you're overwriting the value of formatd and formats (and so you're eventually passing something other than "%s" to printf).
Instead of your definition of the ministring memory location, try using the following :
Also, instead of this:
I don't understand why you aren't using this instead:
Also, if you want to print the ministring, then instead of this:
Do this:
Also instead of this:
Why not this:
ALso I suggest that you use a debugger to: