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\n",gi);

17     _asm jmp code

18     gi=13;

19 _lb1:

20     printf("gi=%d\n",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处:

代码构造成功。

你可能感兴趣的:(汇编)