问题描述
我想知道如何正确地以汇编语言对字符串进行空终止:我所做的只是设置movq $ 0(position_to_terminate),我认为这将终止我的字符串。但是,当我打印出缓冲区时,在null终止符之后仍然有很多东西:
58 ASSERT(0 == strcmp(buf,"48"));
(gdb) print buf
$1 = "48\000\000\000\000\000\000\000\000\246\367\377\177\000"
(gdb) n
Program received signal SIGSEGV,Segmentation fault.
0x0000000000400a78 in testFormatByteAsHex (objs=objs@entry=0x603690)
我对此感到非常困惑,因为它可以在c语言中工作,还有其他方法可以终止汇编语言中的字符串吗?预先谢谢您。这是我编写的汇编函数:该函数的目的是读取2个参数,第一个是0到255(%rdi)之间的值,第二个是length> = 2的数组(%rsi)并将十六进制表示形式存储在%rsi数组中。
hex_format_byte_as_hex:
subq $8,%rsp
movq $0,%r10
movq $0,%rdx
.Lhex_format:
cmpq $1,%r10
jg .Lreturn1
movq %rdi,%rax /*store input into %rax*/
movq $16,%rbx /*store 16 into %rbx*/
idivq %rbx /*store dividend in rax,and remainder in rdx*/
cmpq $10,%rdx
jge .Lhex
addq $48,%rdx
jmp .Lstore
.Lhex:
addq $87,%rdx
.Lstore:
movq %rdx,(%rsi,%r10) /*store remainder in %rsi[0]*/
addq $1,%r10 /*increase %r10 by 1*/
movq $0,%rdx
movq %rax,%rdi
jmp .Lhex_format
.Lreturn1:
movq $0,%r11
movq $1,%r10
movq (%rsi,%r10),%r12
movq (%rsi,%r11),%r13
movq %r12,%r11)
movq %r13,%r10)
movq $2,%r10
movb $0,%r10)
addq $8,%rsp
ret
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)