随笔分类 -  汇编语言

摘要:全局变量和局部变量 阅读全文
posted @ 2017-01-16 22:40 _No.47 阅读(491) 评论(0) 推荐(0)
摘要:各种调用方式的考察 示例: cdecl方式是调用者清空堆栈: 如果执行的是fastcall: 借助两个寄存器传递参数: 参数1和2借助局部变量来存储: 返回值 如果返回值是结构体: 返回值存放在eax和edx两个寄存器中: 返回之后再存放eax和edx到对应的局部变量中: 如果这个结构体中存放的值太 阅读全文
posted @ 2017-01-16 15:51 _No.47 阅读(900) 评论(0) 推荐(0)
摘要:if...else...语句 示例: if构成多分支语句 switch 有序线性的switch: 3E82D8位置存放了一个表,标明了要跳转到的地址: 这里的每四字节都标明的是每个case块的首地址: 除了表中的第四个位置,因为没有case 4 所以,第四个位置直接标明的是退出的地址: 非线性索引: 阅读全文
posted @ 2017-01-14 10:28 _No.47 阅读(571) 评论(0) 推荐(0)
摘要:恢复内容开始 加法: 示例: 常量相加,则在编译期间就计算出两个常量相加后的结果,直接将这个结果参与运算,减少了运行期的计算。当有变量参与运算时,会先取出内存中的数据,放入通用寄存器中,再通过加法指令来完成计算过程得到结果。 如果开启O2选项,则是考虑效率优先,编译出来的汇编代码会有很大的变化: 如 阅读全文
posted @ 2017-01-13 17:11 _No.47 阅读(845) 评论(0) 推荐(0)
摘要:恢复内容开始 基本的浮点数指令 示例代码: Visual Studio 2013的反汇编代码是: 对于movss,表示移动标量单精度浮点值 将标量单精度浮点值从源操作数(第二个操作数)移到目标操作数(第一个操作数)。源操作数与目标操作数可以是 XMM 寄存器或 32 位内存位置。此指令可用于将单精度 阅读全文
posted @ 2017-01-11 22:02 _No.47 阅读(2645) 评论(0) 推荐(0)
摘要:如果我们有一个子函数,返回值是string类型对象: 那么我们在主函数中常使用char类型指针去接收它的返回对象: 当我们用: 输出p指向的字符数组时,会输出“sssssssssssssssssss”吗?答案是否定的: 我曾一度认为因为可以做类似如下的定义: 且可以输出正确的结果: 则上边的用p接收 阅读全文
posted @ 2015-10-23 10:04 _No.47 阅读(193) 评论(0) 推荐(0)
摘要:InitializerC++ Primer上说:如果未初始化的Built-in type是定义在function外部的,那么它将自动被初始化为“0”;如果uninitialized的built-in type对象是定义在function内部的,那么它就是undefined的,那么,对它拷贝和访问就都... 阅读全文
posted @ 2015-10-21 21:04 _No.47 阅读(362) 评论(0) 推荐(0)
摘要:先贴一段代码:跟踪后看到:无论是给bool类型赋值为正整数 还是true,都会转变为1。那么float和double类型如何转换为bool类型?将bool类型赋值给int类型变量,就是借助了寄存器eax,将1byte的值放入eax,再从eax取出dword宽度的值即可。但是问题来了,程序在刚开始“初... 阅读全文
posted @ 2015-10-20 21:08 _No.47 阅读(283) 评论(0) 推荐(0)
摘要:我这里学习汇编语言的思路就是逆向C++源码。先从最简单的一个程序入手:为什么程序的开头两句总会是push ebpmov ebp,esp?先来看一个程序:这个程序调用fun()时,fun的汇编代码也是如此,开头调用这两句汇编:其实,这里ebp中保存的是你当前的函数(main函数)的栈基址,当你进入一个... 阅读全文
posted @ 2015-10-13 20:59 _No.47 阅读(450) 评论(0) 推荐(0)