zoukankan      html  css  js  c++  java
  • 由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。

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

  • 相关阅读:
    第11组 Beta冲刺(1/5)
    第11组 Alpha事后诸葛亮
    第11组 Alpha冲刺(6/6)
    第11组 Alpha冲刺(5/6)
    第11组 Alpha冲刺(4/6)
    第11组 Alpha冲刺(3/6)
    毕设笔记
    软工实践个人总结
    第01组 Beta版本演示
    第01组 Beta冲刺(5/5)
  • 原文地址:https://www.cnblogs.com/LearningC/p/1894663.html
Copyright © 2011-2022 走看看