1.1.3-构造汇编语句
语句 1.1 构造 汇编
2023-09-27 14:24:37 时间
最近打算把《老码识途》搞一遍,就先拿这个构造汇编语句开刀吧。
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处:
代码构造成功。
相关文章
- dockerfile执行语句的,执行目录以前面的workdir为准
- python try语句相关使用(try/except/else/finally)
- Sql Server中改变表中的字段名的语句!(不是教程胜似教程,是示例代码)
- 6.Verilog的always语句使用
- C#,入门教程(18)——分支语句(switch-case)的基础知识
- JS——分支语句
- 《Puppet实战手册》——2.8 编写功能强大的条件语句
- 《NoSQL权威指南》——2.5 执行一个ALTER语句
- oracle update语句的几点写法
- Swift流程控制之循环语句和判断语句详解
- 流程控制语句(MySQL/MariaDB )
- 分支结构case 语句语法
- 在Html.ActionLink中运用二维判断语句
- (1.3)mysql 事务控制和锁定语句
- SQL SERVER 数据库备份的三种策略及语句
- SQL查询语句的执行顺序