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处:

代码构造成功。

原文地址:https://www.cnblogs.com/jiu0821/p/4464485.html