• 下面是一段可以执行的x64 的 nasm 汇编代码,类似可执行文件的外壳代码
bits 64
global start
extern MessageBoxAsection .text
start:push rbppush raxpush rbxpush rcxpush rdxpush rsipush rdipush r8push r9push r10push r11push r12push r13push r14push r15jmp real_callmessage: db 'hello',0caption: db 'msg',0
real_call:xor rcx,rcxmov rdx,messagemov r8,captionxor r9d,r9dsub rsp,28hcall MessageBoxAadd rsp,28hpop r15pop r14pop r13pop r12pop r11pop r10pop r9pop r8pop rdipop rsipop rdxpop rcxpop rbxpop rbpret
  • 运行是崩溃的
  • 这么简单的程序也会崩溃
  • 没有什么逻辑啊???
    看看出问题的是什么指令:
movaps xmmword ptr [rsp+150h],xmm8
提示:Access violation - code C0000005
查看栈rsp 并没有出问题
再查看一下 movaps 指令:
在网上查到这条指令说明:
从源操作数(第二个操作数)将包含四个压缩单精度浮点值的双四字移到目标操作数(第一个操作数)。此指令可用于将 128 位内存位置的内容加载到 XMM 寄存器、将 XMM 寄存器的内容存储到 128 位内存位置,或是在两个 XMM 寄存器之间移动数据。源操作数或目标操作数是内存操作数时,操作数必须对齐 16 字节边界,否则将生成一般保护性异常 (#GP)。要在未对齐的内存位置中移入/移出压缩单精度浮点值,请使用 MOVUPS 指令。

再看rsp 的值是0x30f2e8
rsp+150h 的确是不被16整除
哪里引起的呢?
在保留寄存器的时候保留了15个寄存器,恰好不能被16 整除。所以出现了问题。
汇编写代码的时候要注意啊。

sse 指令xmm寄存器和内存互相复制的问题相关推荐

  1. 汇编之寄存器(内存访问)之字与字节的传送

    文章目录 内存中字的存储 DS和[address] 字的传送 操作符X ptr 俗话说的好,温故而知新! 内存中字的存储 8086CPU中,用16位寄存器来存储一个字.高8位存放高位字节,低8位存放低 ...

  2. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(1) - 概述/历史/新数据类型/XMM寄存器组

    SSE Instructions SSE Overview & History Intel SSE技术的全称是Streaming SIMD Extension,中文译作流式单指令多数据指令扩展 ...

  3. 数据传送类指令LAD的数据传送方向是( )。 A 从寄存器到内存 B 从寄存器到寄存器 C 从内存到内存 D 从内存到寄存器...

    LAD (Load Effective Address) 是一种数据传送类指令,它的数据传送方向是从内存到寄存器.因此答案是 D 从内存到寄存器. LAD 指令用于将某个内存地址中的值加载到寄存器中. ...

  4. 一些汇编指令和寄存器。

    今天学习C中对于一些代码中,执行原理不是清楚的了解,如简单的字符型char数据,编译器是如何处理的.以及等等很多只看过程远远不能清楚了解内部原理,对于学习有很深的障碍.所有有必要去学习基础汇编与寄存器 ...

  5. java sse实例_使用SSE指令

    回答(15) 2 years ago SSE指令是特定于处理器的 . 您可以在维基百科上查找哪个处理器支持哪个SSE版本 . 如果SSE代码更快或更快取决于许多因素:第一个当然是问题是内存限制还是CP ...

  6. 汇编语言:mov指令,寄存器,寻址

    冯诺依曼计算机,将计算机分为5大部件:运算器,控制器,存储器,输入设备,输出设备.运算器和控制器共同执行指令.指令和数据一样,保存为二进制数据.运算器和控制器共同组成CPU,CPU执行机器指令,也就是 ...

  7. linux内存地址断点,开发一个 Linux 调试器(三):寄存器和内存

    上一篇博文中我们给调试器添加了一个简单的地址断点.这次,我们将添加读写寄存器和内存的功能,这将使我们能够使用我们的程序计数器.观察状态和改变程序的行为. 注册我们的寄存器 在我们真正读取任何寄存器之前 ...

  8. ARM指令寻址方式之: 内存访问指令寻址

    4.2  内存访问指令寻址 根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种. ① 字及无符号字节的Load/Store指令的寻址方式. ② 杂类Load/Store指令的寻址方式. ③ ...

  9. [Win32]一个调试器的实现(四)读取寄存器和内存

    [Win32]一个调试器的实现(四)读取寄存器和内存 作者:Zplutor  出处:http://www.cnblogs.com/zplutor/  本文版权归作者和博客园共有,欢迎转载.但未经作者同 ...

最新文章

  1. 让你提升命令行效率的 Bash 快捷键 [完整版]
  2. centos yum安装python2.7及常见报错处理
  3. 提升安全性WindowsXP必禁的十大服务
  4. 【Vue案例三】使用v-if指令 / component标签实现组件的切换
  5. 一键搞定JavaEE应用,JTM1.0(JRE+Tomcat+MySQL绿色运行环境)
  6. 群体智能算法之蝙蝠算法
  7. 443端口与80端口
  8. 怎么防治计算机病毒,计算机病毒怎么防治
  9. Win10 更改不了注册表,重启之后恢复原样
  10. logstash 导入数据,查看每秒导入的数据量及已导入数量和已导入时间
  11. 单例设计模式(饿汉式VS懒汉式)
  12. VS2019中Git源代码管理总结
  13. python基础教程第三版豆瓣-数据结构与算法必读书单吐血整理推荐【附网盘链接】...
  14. Image Thresholding图像阙值化和Adaptive Thresholding
  15. vue项目中解决谷歌浏览器默认填充账号密码问题
  16. ISO 32000-2 国际标准7.7
  17. ch01_时间序列分析简介
  18. 网络安全威胁的主要内容
  19. 数值逼近课程设计(1)——runge现象
  20. 北大张铭教授:基于知识图谱的机器学习

热门文章

  1. Quill编辑器实现图片上传功能
  2. 游戏辅助背后的黑产流水线:年劫持攻击千万次牟利数百万
  3. 浙大愤青郑强教授的演讲(大学生都来看看吧)
  4. Labview移位寄存器理解(例子说明)
  5. 我的世界天空之城服务器位置,我的世界天空之城建筑地图详解(附存档)
  6. GSVA:pathway级别的差异分析
  7. 室内电子地图-自定义室内地图-室内地图在线工具
  8. python占内存吗_为什么我的python进程会占用这么多内存?
  9. 01背包python解法_0-1背包问题及Python代码实现
  10. 2022-2028年中国健康险行业市场发展现状及竞争格局预测报告