zoukankan      html  css  js  c++  java
  • 1.1.3-构造汇编语句

    最近打算把《老码识途》搞一遍,就先拿这个构造汇编语句开刀吧。

    1.1.3

    在c语言里嵌入汇编语句,构造mov和jmp的机器指令,从而让程序按自己指定的路径跑。

    见代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 
     5 int gi;
     6 void *address;
     7 
     8 void *buildCode();
     9 
    10 int main(){
    11     void *code=buildCode();
    12     _asm {
    13         mov address,offset _lb1
    14     }
    15     gi=12;
    16     printf("gi=%d
    ",gi);
    17     _asm jmp code
    18     gi=13;
    19 _lb1:
    20     printf("gi=%d
    ",gi);//输出18
    21     getchar();
    22     return 0;
    23 }
    24 void *buildCode(){
    25     char *code=(char *)malloc(16);
    26     char *pMov=code;
    27     char *pJmp=code+10;
    28     char *pAddress;
    29     //mov gi,18
    30     pMov[0]=0xc7;
    31     pMov[1]=0x05;
    32     pAddress=pMov+2;
    33     *((int *)pAddress)=(int)&gi;
    34     *((int *)(pAddress+4))=18;
    35     //jmp address
    36     pJmp[0]=0xff;
    37     pJmp[1]=0x25;
    38     *((int *)(&pJmp[2]))=(int)&address;
    39     return code;
    40 }

    buildCode()就是在code处构造两句汇编指令,从而运行_lb1处代码,输出18。

    反汇编查看code处:

    代码构造成功。

  • 相关阅读:
    uva11572 Unique Snowflakes
    codeforces#333 div2 B. Approximating a Constant Range
    uva11134 Fabled Rooks
    吐槽。。。
    uva 1605 Building for UN
    uva 120 Stacks of Flapjacks
    uva1152 4 Values whose Sum is 0
    uva817 According to Bartjens
    uva11214 Guarding the Chessboard
    无标题
  • 原文地址:https://www.cnblogs.com/jiu0821/p/4464485.html
Copyright © 2011-2022 走看看