// asmjmp.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#include <malloc.h>int gi;
void * address;//这里是一个变量的定义,跟函数没有一点关系void * buildCode()
{//我们要构建的代码如下// mov gi, 18// jmp address;//mov gi, 被赋值整数;指令是10个字节组成C7 05 gi的地址四字节 被赋值整数四字节//jmp address;6字节,前两个为ff 25,后4字节为地址//因此我们需要分配16个字节char * code = (char *)malloc(16);char * pMov = code;char * pJmp = code + 10;char * pAddress;//构建mov gi, 18pMov[0] = 0xc7;pMov[1] = 0x05;pAddress = pMov + 2;*((int *)pAddress) = (int)&gi;*((int *)(pAddress + 4)) = 18;//构建jmp addresspJmp[0] = 0xff;pJmp[1] = 0x25;*((int *)(&pJmp[2])) = (int)&address;//jmp是跳到address变量中存的地址lb1return code;
}void main()
{   void * code = buildCode();//调用buildCode在堆中构建代码_asm {mov address, offset _lb1;  //现在address全局变量中存的就是_lb1所在的地址}gi = 12;printf("gi = %d\n", gi);_asm jmp code;//执行我们自己构建的代码gi = 13;_lb1:printf("gi = %d\n", gi);//打印的结果为18,而不是12getchar();
}

1、在堆中分配一块内存,在其中构建相应的代码并执行。其实已经越过了一般的代码机制,在数据段中执行指令

2、_asm中的代码如果只有一条可以不加{ }

3、_asm中的代码可以不加分号。表面上只是一个语法规定,但背后有深刻原因:每条指令的长度都是相同的。每当计算机识别出是那一条指令,读取多长是明确的,不用再适用分号进行区分。

老码识途——在堆中构建mov和jmp指令相关推荐

  1. 老码识途:从机器码到框架的系统观逆向修炼之路 pdf电子书

    重要提示尊敬的用户您好,由于老码识途:从机器码到框架的系统观逆向修炼之路pdf书受百度网盘影响无法做公共分享,只能私密分享,有不到之处请多多谅解! 百度网盘链接: http://pan.baidu.c ...

  2. 《老码识途》读书笔记:第一章(上)

    <老码识途>读书笔记:第一章--欲向码途问大道,锵锵bit是吾刀(上)   1.赋值语句 对于全局变量赋值语句,例如下面这句: 1 int gi; 2 void main(int argc ...

  3. 老码识途学习笔记(一)

    第一章 全局变量引发的故事 1 程序存储区 程序存储区一般有下列几段: 程序代码区(SECTION.txt ): 用来存放可执行文件的操作指令(二进制),也就是说是它是可执行程序在内存中的镜像.代码段 ...

  4. 老码识途读书笔记 1

    知识点记录: 1.int 或指针类型的全局变量默认初始化为0,局部变量则为0xcccccccc.(win7 + vs2008 ) 2.内存溢出攻击即使用6个字节空间改变程序执行流程达到某种目的.话说当 ...

  5. 《老码识途:从机器码到框架的系统观逆向修炼之路》- 第1章 - 总结

    本章学到了什么 调试技巧:在VS中断点调试,查看反汇编代码,step into进行步进调试,运行过程中查看寄存器.内存地址.变量值变化等. 机器码构造能力:使用C/C++中的直接在C代码里写汇编语言的 ...

  6. 老码识途之对象函数调用

    上一期,我们讨论了普通函数的调用过程,如果没弄明白,看这里 今天所要讲的将是对象调用函数. class C{public:int a;int b;int c;void f(int t){a = t;} ...

  7. 老码识途之构造函数和析构函数

    对象初始化过程就是先父类构造函数,再子类构造函数.,那么我们从汇编角度去探索这个过程是怎么样的 class P{public:int a ;P(){a = 1;}~P(){a = 4;} };clas ...

  8. 读书 --- 老码识途

    上周在图书馆借了这本书,这个周末细看了下,是本好书.作者应该是个大学教授叫韩宏.书中讲的很底层,一开始就告诉大家如何debug一段程序,在VS2008里面查看内存.寄存器.反汇编.通过这些来认识汇编. ...

  9. 老码识途1之函数调用和局部变量

    无论在编程中,还是在面试中,都会遇见调用函数这个东东,但是,要是让你说函数是怎么调用的,你能回答上来吗,接下来就让我们一起探索函数如何在汇编层次上实现调用的 在接下来,我们将有几个问题要去解决 函数调 ...

最新文章

  1. MonoRail学习笔记一:一个小例子
  2. 数学推导+纯Python实现机器学习算法12:贝叶斯网络
  3. 机器人行业研究报告:智能化造就新时代,自动化生产成刚需
  4. CSS样式----文字样式
  5. 《深度探索C++对象模型》--1 关于对象
  6. linux下查看机器配置
  7. 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)
  8. 计算机科学必读书籍_5篇关于数据科学家的产品分类必读文章
  9. Reason: image not found
  10. html背景图不显示_批量显示多张有序排列的图标,使用精灵图CSS Sprites这种办法...
  11. 论文浅尝 | 基于文本关联的知识图谱的无监督嵌入增强
  12. Exchange2003的设定及安全管理
  13. ASP.NET定制简单的错误处理页面
  14. Java==与equals方法的区别
  15. 在CentOS 7系统上安装PHP 7.4版本的方法
  16. python中os模块作用
  17. 使用shinydashboard编写高级UI页面(1)
  18. CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷...
  19. 索尼Xperia XZ1 Compact刷机,解锁BL,刷Twrp Recovery和Root教程
  20. python语言的单行注释以单引号开头_知到智慧树大数据分析的python基础(山东联盟)(1)答案章节期末答案...

热门文章

  1. html 子页刷新父页面刷新,子框架页刷新父页面其它框架的办法
  2. 解决安装双系统后ubuntu系统只有一个分辨率问题
  3. 如何重设/删除SOLIDWORKS注册表?
  4. MADS100桌面发卡器
  5. superset 二次开发之看板渲染为深色大屏(图表文字颜色更改)
  6. GB28181融合视频会议的实现
  7. spaa的交互式绘图_第五章:SPSS统计绘图功能详解
  8. MEF在.net中实现插件功能
  9. 计算机基础——常用的Dos命令
  10. 局域网内共享excel文件的方法