tiny-os icon indicating copy to clipboard operation
tiny-os copied to clipboard

在第五章加载内核时,读盘的函数 read_disk_m_32 存在点问题

Open joeygong13 opened this issue 3 years ago • 2 comments

在第五章加载内核时,读盘的函数 read_disk_m_32 ,小弟在学习大佬代码的时候发现在调用返回时 call read_disk_m_32 压入的返回地址老是被覆盖为 0x0000!造成 ret 指令回跳错误 最后发现是调用时用 ebx 存着目标缓冲区地址,但 .go_on_head 的还是用了 bx,所以 32 位的 ebx 被丢弃了高 16 位,在 cx 循环时刚好[bx] 覆盖了栈对应的内存区域

joeygong13 avatar Dec 26 '21 01:12 joeygong13

复现了。这个错误会导致程序回跳地址错误,程序直接结束了,而不是jmp $循环。

chapter5/load-kernel/loader.asm 第254、255行,bx需要改成ebx。

这个错误我整整调了1天😂 害我以为我的mac m1 ARM cpu gcc编译有问题... 希望作者尽快修改,以免更多人踩坑。毕竟这章是首次使用c语言,出错很难排除原因

https://github.com/seaswalker/tiny-os/blob/master/chapter5/load-kernel/loader.asm#L254C10-L254C12

Hurray0 avatar Apr 19 '24 03:04 Hurray0

可以提个PR过来~

seaswalker avatar May 08 '24 07:05 seaswalker