• 由MOV SS,AX 产生的联想


        前些天在学汇编,速度很快,看得不是很仔细。所以决定再次温习一次。无意中看到了书中对 MOV SS,AX这条指令的解释。

              源代码我就不全部贴出来了,说关键地方。

              mov ax,200

              mov ss,ax

              mov sp,10

              push ax

              无疑,代码很简单,意思也很简单。就是指点栈顶,然后入栈。在DEBUG下执行的时候,发现。用T命令执行到 MOV SS,AX的时候,下一条指令却不是 MOV SP,10 而是 push ax 。为什么呢?

            看完解释之后发现。当改变堆栈段地址寄存器的值的时候。也就是SS,下一条指令被无条件执行了。原因不清楚,书上说要等到学习到中断了之后才解释,现在我开始联想。

            如果说一个程序在执行的时候,也就是被装入内存。每条执行都对应一个内存地址。然而这个内存地址里面无疑放的是这条指令的机器码,比如 MOV SS,AX 的机器码为 00 BA CF (假设)。那么接下来的指令,不管是什么。都会被执行。

            如果我通过某种手段修改了 00 BA CF 之后的机器码,里面写的是一条跳转指令。跳转到一段非法程序,如 JMP 500:FC 假如这个地址是一个非法程序的起始地址。当然,前提是让这段非法代码常驻内存。这样这段代码就被执行了。试想,我仅仅需要做的是,修改一小段内存地址的值。却可以做非法操作,这让我们的病毒程序再次被缩小,也许只要1k就可以了。(我之前写的汇编程序,做了个乘法运算,代码还有点长,也没到1k,这里仅仅需要修改内存,代码更短)。说的夸张点,完全可以利用这点做到溢出,得到shell。

             话说回来,到底是不是这样。等我学完了再说吧!

  • 相关阅读:
    你是一直认为 count(1) 比 count(*) 效率高么?
    秒杀系统是如何防止超卖的?
    百亿流量微服务网关的设计与实现
    中台
    Token 、Cookie、Session
    HyperLedger Fabric 1.4 区块链应用场景(3.1)
    HyperLedger Fabric 1.4 区块链工作过程(2.3)
    HyperLedger Fabric 1.4 区块链技术原理(2.2)
    HyperLedger Fabric 1.4 区块链技术定义(2.1)
    HyperLedger Fabric 1.4 区块链技术发展(1.3)
  • 原文地址:https://www.cnblogs.com/LearningC/p/1894663.html
Copyright © 2020-2023  润新知