堆栈平衡 字节对齐怎么弄的

堆栈平衡 字节对齐怎么弄的1、CPU内部通用寄存器由32位扩展到64位 即EAX、 EBX、 ECX、 EDX、 EBP、ESP、 EIP、 ESI、 EDI 扩展为RAX、 RBX、 RCX、 RDX、 RBP、RSP、 RIP

1、CPU内部通用寄存器由32位扩展到64位 即EAX、 EBX、 ECX、 EDX、 EBP、

ESP、 EIP、 ESI、 EDI 扩展为RAX、 RBX、 RCX、 RDX、 RBP、RSP、 RIP、 RSI、 RDI 并且增加了 8 个新的寄存器:R8-R15

2、调用约定不同,32位支持 c 、stdcall、fastcall、64位下就一样:fastcall。具体就是 函数调用的前4个参数 用rcx 、rdx、r8、r9、4个寄存器传递,其余的用堆栈传递。 但保留前4个参数的堆栈空间

堆栈平衡 字节对齐怎么弄的

intel cpu 内部寄存器

3、非易失寄存器 rbx、 rsi 、rdi、 r12、 r13、 r14 、r15这几个寄存器用完之后记得要 恢复它原始的值。通俗地说就是你可以在自己的函数内部使用这些寄存器,但用完 之后必需恢复它原始的值,windows应用层和内核层同样遵循这个原则,本人经常使 用这些寄存器作 while 循环的计数器用,windows api调用不会修改这几个寄存器的 值。

mov rbx,100
.while rbx {} 0;rbx !=0
          ;;;;;  
           ;;;;; 
						invoke MessageBox,0,0,0,MB_OK
            dec rbx
 .endw           

4、SEH 异常机制不同,64位下异常机制已经不使用FS寄存器,会在节表中存储异常结 构,这个在之后的篇幅中会专门介绍。心急的朋友可以调试一下NTDLL!KiUserExceptio nDispatcher 这是应用层异常的总入口,RtlDispatchException 是对64位程序异常的处理 过程 ,包括对AddVectoredExceptionHandler 、SetUnhandledExceptionFilter 的处理, 如果你想在应用层面单步调试的话,这里是个好地方,VMP也可以调试。

5、微软 64位汇编编译器已经不支持高级语法以及 INVOKE调用,所以我们必需使用一个 vasily.inc 的宏才能继续使用高级语法,从字面看貌似是一个俄国人编写的。

6、64位汇编要求函数调用堆栈16字节对齐(windows 会在我们愉快地调用它提供的API时 使用MOVDQA之类的多媒体指令,这指令如果内存不对齐在16字节的话,那就直接报异 常)x64macros.inc 已经为我们默默做好了这一 切。

7、32位汇编不熟悉的话可以参考罗云彬的《Windows环境下32位汇编语言程序设计》

堆栈平衡 字节对齐怎么弄的

8、想对64位CPU有更深的理解看邓志《x86/x64体系探索及编程》《处理器虚拟化技术》

堆栈平衡 字节对齐怎么弄的

堆栈平衡 字节对齐怎么弄的

9、还有很多很多不同的地方。

10、以上两位作者都是神一样的存在。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/15411.html

(0)
上一篇 2024年 5月 18日
下一篇 2024年 5月 18日

相关推荐

关注微信