问题描述
在我的变量定义为 mov [gtt+4],byte '>'
的情况下,我在写入 gtt: db "I'm ! than 10"
后遇到分段错误。
感觉可能是汇编程序出错了。
我正在使用以下命令:nasm -f elf file.asm -o file.o
、ld -m elf_i386 file.o -o file
我曾尝试使用 elf32 而不是 elf 但它没有任何区别。
我的程序的目的是循环 2 次,每次将 ebx 中的值乘以 2。之后,它会比较 ecx > 10 并显示相应的字符串。我试图让它取代“!”带有“”。
我使用的是 Ubuntu,我正在使用 x86 程序集。 这是我的完整代码片段:
section .data:
starti: db "Starting value: 1",0x0a
startil equ $-starti
gtt: db "I'm > than 10!",0x0a
gttml equ $-gtt
section .text:
_start:
mov eax,4
mov ebx,1
mov ecx,starti
mov edx,startil
int 0x80
mov ebx,1 ; Start value!
mov ecx,2 ; Number of iterations
label:
add ebx,ebx ; Add 2*ebx
dec ecx ; ecx -= 1
cmp ecx,0 ; If ecx > 0,loop again
jg label
cmp ebx,10 ; If cbx > 10,jump to gtt-g
jg gttg
mov [gtt+4],byte '<'
mov eax,4 ; If cbx < 10,output <
mov ebx,gtt
mov edx,gttml
int 0x80
mov eax,1 ; Exit gracefully
mov ebx,0
int 0x80
gttg:
mov [gtt+4],byte '>'
mov eax,4 ; display gtt
mov ebx,gttml
int 0x80
mov eax,0
int 0x80
修复
感谢 Jester,“您不能在部分名称后使用冒号,它们不是标签。事实上,冒号包含在名称中,因此汇编器不会将它们识别为标准部分,并且不会应用预期属性意味着您的数据是只读的。TL;DR:使用部分 .data 和部分 .text 没有尾随“。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)