结盟众多企业“教练”, 共同设计、开发及提供人才培养解决方案,通过新颖多样的学习方式,针对性的定制化内容,助力企业全面提升竞争优势。
张银奎
2天
5200元/人
本课程培训周期为2天 如何把现有的32位程序迁移到64位?开发64位的软件与开发32位软件有哪些相同和不同?CPU是如何执行64位程序的?64位系统中是否还可以运行32位的程序?如何调试64位的程序,有哪些新的挑战? 围绕以上问题,本培训将从CPU、操作系统、编译器、调试器、驱动程序、应用程序六个角度系统介绍开发和调试64位程序所需的知识和技巧。培训内容针对x64 CPU和Windows平台。培训方式以理论讲解和代码分析为主,辅以实例演示和动手实验。
培训方式:演讲,演示和动手试验
培训对象:软件开发工程师,测试工程师,架构师,技术负责人
课题 | 描述 | |
---|---|---|
第一部分:理解x64 CPU (2.5小时) |
64位模式 兼容模式 EFER寄存器 模式切换 寄存器集合 段寄存器 页表结构 任务状态段(TSS) 任务寄存器(TR) IDT 64位与32位的比较 |
以Intel64为例,系统介绍x86 CPU的64位工作模式,切换到64位模式的过程,64位模式下的寄存器,内存组织,任务管理,中断响应,和指令集增强 |
第二部分:Windows的64 位版本(2.5小时) |
Windows的64位版本 架构概览 内存布局 系统目录和文件布局 基于表的异常处理机制 WOW64 文件签名 内核增强 |
以Windows Vista的x64版本为例,介绍64位Windows操作系统与32位版本的主要差异,包括内存布局变化,基于表的异常处理机制,兼容32位程序的WOW64设施,内核中的安全增强 |
第三部分:构建64 位程序(1.5小时) |
x64目标 异常处理 调用规约 嵌入式汇编 x64 intrinsic /favor /Wp64 可执行文件格式PE32+ |
以Visual C++编译器(VS2008)为例,介绍编译器的64位支持,编译64位程序的一般方法,新的编译选项,调用规约,不再支持的功能(比如嵌入式汇编) |
第四部分:编写和迁移64 位应用程序(2.0小时) |
数据类型 LLP64编程模式 -Win 64 -Linux 64 预处理宏 _M_IX86 _M_AMD64 _WIN64 移植到64位的常见编译错误 典型代码问题 案例(真实项目迁移) 注册表和文件重定向 不再支持的API 新的API 设计兼容64位的数据结构和接口 |
介绍编写64位应用程序,特别是为现有32位程序增加64位支持所需的方法,包括如何使用预处理宏来保证代码的兼容性,如何修改存在兼容性问题的代码,典型的编译错误和警告,寻找编译器无法发现的问题等 |
第五部分:编写和迁移64 位驱动程序(2.0小时) |
为什么不支持32位的驱动? 数字签名 数据类型 预处理宏 __AMD64__ __IA64__ 内存对齐 支持两种应用程序 IoIs32bitProcess() 不兼容的DDI HalGetBusData() 更新INF文件 常见移植问题 - Hook - 嵌入式汇编 |
与32位应用程序还可以在64位系统中运行不同,64位系统中不可以加载32位的驱动程序,因此如何把32位的驱动程序移植到64位常常显得更加急迫,本节将介绍编写和迁移驱动程序的方法和技巧,包括如何通过宏来兼容两种版本,如何同时支持32位的应用程序和64位应用程序,如何修改旧代码中对淘汰DDI的调用等。 |
第六部分:64位调试(1.5小时) |
选择调试器 WinDBG 表达式 栈回溯 参数历史 有助于调试的编译选项 函数序言和结语 调试驱动程序 调试64位应用程序 调试32位应用程序 分析转储文件 |
本节有两个目标,一是复习和巩固前面所讲的内容,二是介绍调试64位程序时应该注意的地方,包括如何选择调试器,如何观察栈回溯,寻找父函数的参数值,并通过实例分别演示调试64位驱动程序、32位应用、64位应用和转储文件的技巧。 |