实在是怕自己忘掉一些信息,有些时候偶尔看到某本书、某个网页里的一句话,当时并不理解也没有任何体会,但过一段时间突然想起来,发现那句话就是目前最需要的,没有记全又忘了到底在哪看到,信息爆炸的时代,这一定是个悲哀。
索性以后每看到好的东西就记录在简书。
1.有一个github上的操作系统开发教程非常好,和国内的那本自己开发操作系统很相似,优点在于开源的教程是能够保持更新的,计算机这个领域,版本的更迭越来越快,很多教材中的例子都在目前版本环境上运行不了,本来应该实践中学习的经典书籍,只能瞪着眼傻看,看个一知半解,过不了多久就忘了。https://github.com/cfenollosa/os-tutorial
2.ground-up 这本书是将汇编语言的,宋神推荐的书单中的第二本,今天开始看。
2^3
.section .data
.section .text
.globl _start
_start:
movl $3, %eax
movl $2, %ebx
movl $1, %ecx
loop:
cmpl $1, %eax
jl loop_exit
imull %ebx,%ecx
decl %eax
jmp loop
loop_exit:
movl %ecx,%ebx
movl $1,%eax
int $0x80
general-purpose registers :
%eax , %ebx , %ecx , %edx , %edi , %esi
• %ebp :
• %esp
• %eip
• %eflags
je :
Jump if the values were equal
jg :
Jump if the second value was greater than the first value12
jge :
Jump if the second value was greater than or equal to the first value
jl :
Jump if the second value was less than the first value
jle :
Jump if the second value was less than or equal to the first value
jmp :
Jump no matter what. This does not need to be preceeded by a comparison.
下面这个程序出现段错误,目前不知道问题在哪
.code32
.section .data
.section .text
.globl _start
_start:
movl 3,%ebx
pushl %eax
pushl %ebx
call power
movl %edx,%ebx
jmp exit
.type power, @function
power:
pushl %ebp
movl %esp,%ebp
subl 1,%ecx
loop_power:
cmpl 4,%esp
popl %ebp
ret
exit:
movl 0x80
简化为如下,依然段错误,怀疑时函数的写法上有问题
.code32
.section .data
.section .text
.globl _start
_start:
pushl 3
call power
movl %edx,%ebx
popl %ebx
jmp exit
.type power, @function
power:
pushl %ebp
movl %esp,%ebp
#subl 1,%ecx
loop_power:
cmpl 4,%esp
popl %ebp
ret
exit:
movl 0x80
继续简化,成功
.code32
.section .data
.section .text
.globl _start
_start:
pushl 3
call power
# movl %edx,%ebx
popl %ebx
jmp exit
.type power, @function
power:
pushl %ebp
popl %ebp
ret
exit:
movl 0x80
发现问题:
所用linux系统时arch64位系统,在汇编中,每一次pushl进栈都是88个bit位,而eaxl每次只能读取84个比特位,这就产什么问题,第一,如果不加 .code32 是无法编译通过的,会提示pushl的问题。第二,加.code32后,每次用4(%ebp)读取参数时,其实都取的是栈顶元素的后4字节内容,例如有64位栈元素$9,处在栈顶位置,4(%ebp)只能读取到0000两个字节内容,前两个字节内容为:0900。
所以,装了ubuntu32位系统,解决了以上问题。
apt-get install openssh-server
vim /etc/ssh/sshd_config 修改其中Permitrootloginin 为 yes
server ssh restart
更新源:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources.list 删除原有,粘贴国内源
apt-get upgrade
网友评论