美文网首页
2018-11-23

2018-11-23

作者: 半步江南 | 来源:发表于2018-11-23 20:16 被阅读0次

    实在是怕自己忘掉一些信息,有些时候偶尔看到某本书、某个网页里的一句话,当时并不理解也没有任何体会,但过一段时间突然想起来,发现那句话就是目前最需要的,没有记全又忘了到底在哪看到,信息爆炸的时代,这一定是个悲哀。
    索性以后每看到好的东西就记录在简书。

    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 2,%eax movl3,%ebx
    pushl %eax
    pushl %ebx

        call power
        movl %edx,%ebx
        jmp exit
    

    .type power, @function

    power:
    pushl %ebp
    movl %esp,%ebp
    subl 4,%esp movl 12(%ebp),%eax movl 8(%ebp),%ebx movl1,%ecx
    loop_power:
    cmpl 1,%eax jl loop_exit imull %ebx,%ecx decl %eax jmp loop_power loop_exit: movl %ecx,%edx addl4,%esp
    popl %ebp
    ret
    exit:
    movl 1,%eax int0x80

    简化为如下,依然段错误,怀疑时函数的写法上有问题
    .code32
    .section .data
    .section .text
    .globl _start
    _start:
    pushl 2 pushl3
    call power
    movl %edx,%ebx
    popl %ebx
    jmp exit
    .type power, @function
    power:
    pushl %ebp
    movl %esp,%ebp
    #subl 4,%esp movl 8(%ebp),%eax movl 12(%ebp),%ebx movl1,%ecx
    loop_power:
    cmpl 1,%eax jl loop_exit imull %ebx,%ecx decl %eax jmp loop_power loop_exit: movl %ecx,%edx # addl4,%esp
    popl %ebp
    ret
    exit:
    movl 1,%eax int0x80
    继续简化,成功
    .code32
    .section .data
    .section .text

        .globl _start
    

    _start:
    pushl 2 pushl3

        call power
       # movl %edx,%ebx
        popl %ebx
        jmp exit
    

    .type power, @function

    power:
    pushl %ebp
    popl %ebp
    ret

    exit:
    movl 1,%eax int0x80
    发现问题:
    所用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

    相关文章

      网友评论

          本文标题:2018-11-23

          本文链接:https://www.haomeiwen.com/subject/hrljqqtx.html