当前位置: 首页 > news >正文

哪些网站能够免费做公考题三个关键词介绍自己

哪些网站能够免费做公考题,三个关键词介绍自己,江山网站建设,建网站怎样才能通过备案vs2022 x64 C/C和汇编混编 遇到的坑 遇到的问题二、问题复现1.出错代码2.问题分析2.1 堆栈对齐问题 3.解决方案 总结奇数和偶数个寄存器的影响为什么 sub rsp, 8 对奇数个寄存器有用?结论 遇到的问题 0x00007FFFFAE24A29 (msvcp140.dll)处(位于 TestCompileConsole…

vs2022 x64 C/C++和汇编混编 遇到的坑

  • 遇到的问题
  • 二、问题复现
    • 1.出错代码
    • 2.问题分析
      • 2.1 堆栈对齐问题
    • 3.解决方案
  • 总结
      • 奇数和偶数个寄存器的影响
      • 为什么 `sub rsp, 8` 对奇数个寄存器有用?
      • 结论


遇到的问题

0x00007FFFFAE24A29 (msvcp140.dll)处(位于 TestCompileConsoleApp.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
查阅资料发现:异常 0xC0000005: Access Violation 表示程序试图访问一个无效的内存地址。在你的情况下,读取地址 0xFFFFFFFFFFFFFFFF 发生了访问冲突。这通常意味着你试图访问一个无效的指针或未初始化的指针。

— # 一、pandas是什么?
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、问题复现

1.出错代码

代码如下(示例):

capp procsub rsp, 28h             ; 为局部变量和寄存器保存空间; 保存所有需要的寄存器push raxpush rcxpush rdxpush r8push r9push r10push r11; 自定义代码mov rcx, 10              ; 将参数传递给RCX寄存器call hookFunc            ; 调用hookFunc函数; 恢复所有寄存器pop r11pop r10pop r9pop r8pop rdxpop rcxpop raxadd rsp, 28h             ; 恢复堆栈指针ret
capp endp

2.问题分析

2.1 堆栈对齐问题

在 x64 汇编中,函数调用时堆栈指针(RSP)必须是 16 字节对齐的。如果你在调用函数前通过 push 指令保存了寄存器,堆栈指针会减少 8 个字节,这可能会导致堆栈不对齐。

3.解决方案

 capp procsub rsp, 28h             ; 为局部变量和寄存器保存空间; 保持堆栈对齐sub rsp, 8; 保存寄存器push raxpush rcxpush rdxpush r8push r9; 调用你的函数mov rcx, 10call hookFunc; 恢复寄存器pop r9pop r8pop rdxpop rcxpop rax; 恢复堆栈对齐add rsp, 8add rsp, 28h             ; 恢复堆栈指针ret
capp endp

如果保存寄存器的数量是奇数个,可以通过手动调整来保证堆栈对齐。例如,使用 sub rsp, 8 手动调整堆栈指针,使其对齐到 16 字节。


总结

在 x64 汇编中,堆栈的对齐要求是函数调用时堆栈指针(RSP)必须是 16 字节对齐的。为了确保这一点,我们需要根据保存的寄存器数量来决定是否要调整堆栈指针。

奇数和偶数个寄存器的影响

  1. 奇数个寄存器:

    • 每个 push 指令都会将堆栈指针减少 8 个字节
    • 如果你保存奇数个寄存器(例如1、3、5个寄存器),堆栈指针会减少一个不是 16 字节的倍数的值(如 8、24、40 个字节)。
    • 这时,堆栈指针的对齐就会被破坏,从而导致后续函数调用时堆栈不是 16 字节对齐的。
  2. 偶数个寄存器:

    • 如果你保存偶数个寄存器(例如 2、4、6 个寄存器),堆栈指针减少的值会是 16 字节的倍数(如16、32、48个字节)。
    • 在这种情况下,堆栈指针的对齐不会被破坏,因此不需要进行额外的调整。

为什么 sub rsp, 8 对奇数个寄存器有用?

当你保存奇数个寄存器时,堆栈指针被推到一个不是 16 字节对齐的地址。通过在保存寄存器之前执行 sub rsp, 8,你可以先手动将堆栈指针调整到一个不对齐的状态,接下来每次 push 操作都会在最终使堆栈指针回到对齐的状态。

具体来说:

  • sub rsp, 8 手动将 RSP 移动 8 个字节,使其暂时不对齐。
  • 然后,每次 push 操作都会进一步移动 RSP 8 个字节。
  • 如果你总共 push 奇数个寄存器,RSP 将恢复到对齐的状态。

结论

  • 奇数个寄存器: 你需要通过 sub rsp, 8 手动调整堆栈指针,以确保保存和恢复寄存器后堆栈指针是 16 字节对齐的。
  • 偶数个寄存器: 由于堆栈指针在保存和恢复寄存器前后仍然是 16 字节对齐的,所以不需要进行额外的调整。

这个技巧帮助你在函数调用时确保堆栈的对齐性,从而避免潜在的问题。

http://www.jinmujx.cn/news/77937.html

相关文章:

  • 丹东网站优化北京搜索引擎优化主管
  • 网站设计维护员泉州全网营销推广
  • dw网站设计作品网店推广方案范文
  • 怎样显示隐藏的wordpress南宁seo团队哪家好
  • 百度网站怎么优化排名关键词如何优化排名
  • win7系统怎么安装wordpress优化营商环境的意义
  • 缤纷网站免费做服装免费推广网站地址大全
  • 犀牛云做网站一年多少钱网页制作软件下载
  • 好的做网站公司做个网站需要多少钱
  • 网站建设网络推广图片营销手段有哪些方式
  • 高端网站建设 aspx烟台seo关键词排名
  • 建设手机银行的网站seo研究协会网app
  • 华强北 做网站谷歌浏览器官方app下载
  • wordpress内容清空长沙建站优化
  • 湖南网站设计公司sem代运营推广公司
  • mitao wordpressseo推广员是做什么的
  • 哪里有做兼职的网站百度推广注册
  • 亚洲购物网站排名佛山优化推广
  • 网站开发人员必备技能网站维护的主要内容
  • 一个成功网站要素主要有哪些网站优化seo培
  • 公安备案 个人网站如何线上推广自己产品
  • 网站建设都有那些费用网页广告怎么做
  • 电影推荐网站开发企业网站快速排名
  • wordpress 作者回复学好seo
  • 网站开发系统学习哪里搜索引擎优化好
  • 八年级信息所用软件做网站手机优化器
  • 闵行网站建设谷歌seo快速排名优化方法
  • 网站建设会议记录网站seo技术能不能赚钱
  • 网站建设中美女关键词优化推广排名软件
  • wordpress主题dux主题5.2版什么是搜索引擎优化