gpt4 book ai didi

linux - 段错误访问 BSS 内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:53 25 4
gpt4 key购买 nike

section .data
bufChar: equ 0

section .bss
bufNum: resb 1
bufMult: resb 1

...

leerNumero:
xor eax,eax
mov [bufNum],eax
add eax,1
mov [bufMult],eax
inicioLeerNumero:
mov edx,1
mov ecx,bufChar
mov ebx,0
mov eax,3
int 80h
cmp byte [ecx + edx - 1],10 ; Segfaults here.
je rLeerNumero
cmp byte [ecx + edx - 1],48
jl noNumero
cmp byte [ecx + edx - 1],57
jg noNumero
sub eax,48
mul word [bufMult]
jo overflow
add [bufNum],eax
jo overflow
mov eax,10
mul word [bufMult]
jo overflow
mov [bufMult],eax
jmp inicioLeerNumero
rLeerNumero:
mov eax,bufNum
ret
noNumero:
mov eax,errorNumero
mov ebx,lErrorNumero
call imprimir
jmp salir
overflow:
mov eax,errorOverflow
mov ebx,lErrorOverflow
call imprimir
jmp salir

这段代码应该有效,至少在纸面上是这样。我需要在不链接 C 库的情况下完全在汇编中做一些作业,因此我要重新发明轮子并制作一种方法来将数字从控制台读入 EAX。

我在标有注释的行中遇到了一个神秘的段错误,我看不出我是如何尝试访问未对齐的内存的……关于这怎么会失败的任何想法?

最佳答案

int 80h 是否有可能改变 ecxedx 导致错误的指针读取?如果您可以在该指令之前和之后读取调试器中的寄存器,则可以确认这一点。

关于linux - 段错误访问 BSS 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com