Open LimingFang opened 2 years ago
(我目前在写 chp3。 背景:“锯齿螈”内核(就是先一次性加载所有程序,然后顺序运行),ch3分支。 问题概述:假设每个程序是2MB,一共两个程序。那么它们在链接时会在0x8020_0000上面一点,但是运行前会分别被拷贝到[0x8040_0000,0x8060_0000)和[0x8060_0000,0x8080_0000)。然后修改第二个用户程序,只需要改成println!("{}",1),然后在fs.rs里打印缓冲区起始地址,会发现它并不在[0x8060_0000,0x8080_0000)之间,而是0x8020_0000上一点(即链接的位置)。
println!("{}",1)
fs.rs
我也碰到了这样的问题 甚至诡异的多出了一个syswrite,不知道是从哪里来的 syswrite 打log点与上面的相同 上面的这个应该是因为静态链接导致的,字符串被保存在了.rodata段进行调用,而并没有存储在程序内部地址,然后程序内部是有一个指向字符串的引用,将程序复制的时候只是复制了引用,从而调用的是系统内核部分的东西?但是下面的这个syswrite就完全搞不懂哪里来的了
(我目前在写 chp3。 背景:“锯齿螈”内核(就是先一次性加载所有程序,然后顺序运行),ch3分支。 问题概述:假设每个程序是2MB,一共两个程序。那么它们在链接时会在0x8020_0000上面一点,但是运行前会分别被拷贝到[0x8040_0000,0x8060_0000)和[0x8060_0000,0x8080_0000)。然后修改第二个用户程序,只需要改成
println!("{}",1)
,然后在fs.rs
里打印缓冲区起始地址,会发现它并不在[0x8060_0000,0x8080_0000)之间,而是0x8020_0000上一点(即链接的位置)。