将WINE从X86移植到ARM平台的方法.pdf

上传人:t**** 文档编号:974774 上传时间:2018-03-22 格式:PDF 页数:11 大小:482.22KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110173905.5

申请日:

2011.06.24

公开号:

CN102364442A

公开日:

2012.02.29

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/445申请日:20110624|||公开

IPC分类号:

G06F9/445

主分类号:

G06F9/445

申请人:

浙大网新科技股份有限公司

发明人:

毛德操; 王承志; 徐鼎鼎; 陈天洲; 俞立呈

地址:

310030 浙江省杭州市三墩西园八路1号浙大网新软件园A楼15层

优先权:

专利代理机构:

杭州宇信知识产权代理事务所(普通合伙) 33231

代理人:

张宇娟

PDF下载: PDF下载
内容摘要

本发明公开了一种将Wine从x86移植到ARM平台的方法。Wine能够在其他操作系统中模拟Windows应用的执行环境,从而可在其他操作系统中直接运行Windows二进制程序。本发明提出的方法包括以下步骤:1)将x86汇编代码改写为ARM汇编代码;2)增加ARM的CONTEXT数据结构表示ARM上的寄存器上下文;3)增加对ARM可执行映像中CPU架构签名支持;4)修正ITEMIDLIST数据结构存储位置,保证内存地址对齐。本发明使得Wine能够在使用ARM平台的系统如大量的嵌入式系统上运行,让大量Windows程序在各种嵌入式平台上能直接运行,从而降低各种已有应用的部署成本。

权利要求书

1: 将 Wine 从 x86 移植到 ARM 平台的方法, 其特征是 : 1.1、 改写 x86 汇编代码为 ARM 汇编代码 ; 1.2、 增加 ARM 的 CONTEXT 数据结构, 表示 ARM 处理器上的寄存器上下文 ; 1.3、 增加对 ARM 架构可执行映像 PE 文件头 CPU 架构签名的支持, 使 Wine 能识别 ARM 可执行映像 ; 1.4、 对 ITEMIDLIST 数据结构的存储位置进行修正, 保证其内存地址是与长字或字的 边界对齐的。
2: 根据权利要求 1 所述的方法, 其特征在于, 改写 x86 汇编代码为 ARM 汇编代码的方法 为: 2.1、 将 x86 汇编指令的指令逐条改写为对应的 ARM 汇编指令, 并将操作数改为 ARM 的 寄存器 ; 2.2、 对于不存在对应 ARM 汇编指令的 x86 汇编指令, 使用多条 ARM 汇编指令以实现与 对应 x86 汇编指令相同的功能。
3: 根据权利要求 2 所述的方法, 其特征在于, 需要改写的汇编代码包括 : loader/ preloader.c 中的所有汇编代码 ; libs/wine/port.c 中的 wine call on stack 函数 ; libs/ wine/port.c 中的 wine switch to stack 函数。
4: 根据权利要求 1 所述的方法, 其特征在于, 增加 ARM 架构可执行映像 PE 文件头 CPU 架构签名的支持方法具体为增加对文件头中 ARM 架构签名的判断, 允许 ARM 架构可执行映 像被装载执行。
5: 根据权利要求 1 所述的方法, 其特征在于, 对 ITEMIDLIST 数据结构的存储位置进行 修正, 若 ITEMIDLIST 数据结构的大小为奇数, 则计算地址时在原来的地址上加 1, 使得数据 结构的地址总是偶数对齐的。

说明书


将 Wine 从 x86 移植到 ARM 平台的方法

    技术领域 本发明涉及计算机运行环境模拟器领域、 操作系统领域和 CPU 体系结构领域, 尤 其是将 Wine 从 x86 移植到 ARM 平台的方法。
     背景技术 Microsoft Windows( 简称 Windows) 是目前桌面电脑上常见的操作系统, 有多个 不同的版本, 适用于个人电脑、 工作站和服务器。Windows 系列操作在桌面电脑市场的占有 率于 2010 年底达到 90%以上, 可见其普及率和受欢迎程度。Windows 之所以这么受到用户 欢迎的一大原因就是 Windows 平台上的应用软件非常多, 大部分的软件开发商都愿意首先 为 Windows 平台开发应用, 而很多用户不愿意切换到其他操作系统就是因为其他系统上没 有用户所需的某个应用或令用户满意替代版本。
     ARM 架构处理器是目前非常流行的一种处理器架构, 其精简指令集 (RISC) 的设计 比起桌面电脑处理器中常见的 x86 的复杂指令集 (CSIC) 更加高效, 能耗也更低。因此目前 很多嵌入式设备或移动设备如智能手机大多都采用了 ARM 架构的处理器。然而由于 ARM 的 指令集与 x86 指令集完全不同, 无法在 ARM 处理器上运行传统桌面电脑的 Windows 操作系 统, 因而也无法运行 Windows 操作系统中的众多软件。
     Wine 是一个在 x86 处理器上的模拟运行环境, 利用 Wine 可在其他操作系统 ( 通 常为类 Unix 的操作系统如 Linux) 中直接运行 Windows 的可执行程序。因此利用 Wine 能 够在不同操作系统上直接获得 Windows 环境下丰富的应用资源, 很多 Windows 应用不需要 进行任何修改 ( 不需要重新编译 ) 就能直接在 Wine 中运行, 并且保持较高的运行效率。然 而 Wine 只支持 x86 的处理器架构, 并不支持 ARM, 因而无法在目前众多基于 ARM 的设备上运 行。
     发明内容
     本发明提出一种将 Wine 从 x86 移植到 ARM 平台的方法, 从而使得 ARM 平台上也 能运行众多的 Windows 程序, 应用开发商能够快速地将原有的应用部署到目前众多的基于 ARM 的设备中, 获得更多经济效益。
     要将原为 x86 架构 CPU 编写的 Wine 模拟器移植到 ARM 架构的 CPU 上, 首先需要解 决的问题就是把 x86 指令集的机器代码转换为 ARM 指令集的机器代码。对于使用 C 等高级 语言编写的源代码, 只需要在 PC 上使用生成 ARM 架构机器代码的编译器交叉编译即可。但 Wine 为了更有效地控制底层硬件, 有一部分源代码是使用汇编代码编写的, 由于汇编代码 是与 CPU 指令集有关的, 因此需要手工将这些汇编代码改写成 ARM 指令集的汇编代码。 具体 的方法是 : 将 x86 汇编的指令逐条改写为对应的 ARM 汇编指令, 并将指令中的操作数从 x86 寄存器改为 ARM 寄存器。由于 x86 指令集和 ARM 指令集的差异性, 对于不存在对应 ARM 汇 需要使用多条 ARM 汇编指令来实现对应与对应 x86 汇编指令相同的功 编指令的 x86 指令, 能。所要改写的汇编代码有以下几部分 :
     ● loader/preloader.c 中的所有汇编代码 ;
     ● libs/wine/port.c 中的 wine call on stack 函数 ;
     ● libs/wine/port.c 中的 wine switch to stack 函数。
     另有一些数据结构并不是汇编指令, 但也与具体的 CPU 有关。Wine 中的 CONTEXT 数据结构用于表示 CPU 的寄存器上下文, 寄存器上下文指某一时刻 CPU 所有寄存器的值, 存 储 CPU 在这一时刻的状态。 不同的 CPU 具有不同的寄存器集合, 所以表示它们的寄存器上下 文的 CONTEXT 数据结构也不同。Wine 在 wine/include/winnt.h 中提供了 ARM 的 CONTEXT 数据结构定义, 但代码中却并没提供有关的代码实现, 需要加以补充, 增加 ARM 寄存器上下 文保存、 恢复、 复制以及具体寄存器值提取的函数。
     Wine 中运行的 Windows 可执行映像格式为 PE(Portable Executable), 其文件头 中有一个字段指明此可执行文件是针对哪一种 CPU 的, 称为 CPU 架构签名。对于 ARM 处理 器, 这个字段的值为 IMAGE FILE MACHINE ARM 或 IMAGE FILE MACHINE THUMB, 这两个常数 的值分别是 0x01c0 和 0x01c2。Wine 不能识别这两个 CPU 架构签名, 所以无法装载或运行 ARM 的可执行映像。因此要添加对这种 CPU 架构签名的支持, 需要修改 kernel32/process. c。
     定义在 include/shtypes.idl 中的数据结构 ITEMIDLIST 如下 :
     其中 SHITEMID 的定义为 :
     这里数组 abID 的大小可变, 其大小记录在字段 cb 中, 这个数组用来存放文件名。 当文件名的长度为奇数时, 数据结构 SHITEMID 的大小是奇数, 从而 ITEMIDLIST 的大小也 是奇数, 因而不与长字或字的边界对齐。在实际使用中, 好几个 SHITEMID 数据结构会首尾 相连叠在一起, 形成一个列表。这样, 如果第一个 SHITEMID 数据结构的大小是奇数, 第二 个 SHITEMID 数据结构的起点就不与长字或字的边界对齐了。x86 处理器允许这样的不对 齐的地址访问, 但 ARM 处理器只允许与长字或字边界对齐的内存访问, 否则就不保证操作 的正确性。由于这个原因, 当 CPU 从非对齐的 SHITEMID 数据结构中读取其 cb 字段的数值时, 所得到的可能是个错误的数值。本发明通过对有关的函数 ILGetSize、 ILGetNext 进行 修改来解决这个问题, ILGetSize 函数用于获得单个 SHITEMID 数据结构的大小, ILGetNext 函数用于获得 SHITEMID 数据结构组成的列表中某一项的下一项地址。修改方法为 : 在 ILGetSize 函数计算单个 SHITEMID 结构大小以及 ILGetNext 函数计算下一项地址时, 新增 一个 _insigma_align 函数计算 cb 部分的大小, 其计算方法是如果 abID 数组的大小为奇数 的话, 就在此数值上加 1, 使其与长字或字的边界对齐。通过复制一组 SHITEMID 数据结构 形成一个列表的时候, 实际复制的长度取决于 ILGetSize 函数的返回值, 而返回值经过了 _ insigma_align 函数调整, 地址一定是偶数。 因此在一个列表中, 每一个 SHITEMID 数据结构 的起点就都是与长字或字的边界对齐的, 解决了 ARM 处理器访问内存时边界必须对齐的问 题。 附图说明
     图 1 是本发明实施例的将 Wine 从 x86 移植到 ARM 平台的流程图。 具体实施方式
     如图 1 所示。本实施例的将 Wine 从 x86 移植到 ARM 平台的流程包括如下步骤 :
     第一, 将 x86 汇编的指令逐条改写为对应的 ARM 汇编指令, 并将指令中的操作数从 x86 寄存器改为 ARM 寄存器。由于 x86 指令集和 ARM 指令集的差异性, 对于不存在对应 ARM 汇编指令的 x86 指令, 需要使用多条 ARM 汇编指令来实现对应与对应 x86 汇编指令相同的 功能。
     具体的实现方法是通过增加宏定义 _arm_ 来在编译时控制编译 ARM 专用的代码, 因此 ARM 的汇编代码会被检测 _arm_ 宏是否定义的条件编译语句包围。由于有较多的源代 码涉及到 x86 汇编代码到 ARM 汇编代码的转换, 因此这里只针对 libs/wine/port.c 中的 wine_call_on_stack 函数进行举例说明。wine_call_on_stack 函数在转换后的代码如下 :
     以上代码保留 _i386_ 宏的条件编译指令包围的 x86 的汇编代码 (x86 的具体代码 使用 “......” 省略 ), 新增用 _arm_ 宏的条件编译指令包围的 ARM 汇编代码, 其代码内容是 将 x86 的对应指令按照功能改写为 ARM 汇编指令。
     第二, 增加 ARM 表示寄存器上下文的 CONTEXT 数据结构步骤如下 :
     1、 在 dlls/ntdll 目 录 下 创 建 名 为 signal_arm.c 的 文 件, 其中需要实现与原
     signal_i386.c 相同的函数, 包括 save_context、 restore_context 等函数。
     2、 在 dlls/ntdll/thread.c 中 有 个 函 数 copy_context, 需 要 增 加 对 ARM 的 CONTEXT 与 x86 的 CONTEXT 中不同的字段的复制代码。
     3、 在 WineServer 的代码中, 需要在 server 目录下面创建名为 context_arm.c 的 文件, 其中需要实现与原 context_i386.c 相同的函数, 例如 copy_context、 get_context_ ip 等函数。
     第三, 增加对 ARM 架构可执行映像 PE 头文件 CPU 架构签名支持的具体方法是修改 kernel32/process.c 中的 start_process 函数为 :
     以上代码中增加了对头文件的 CPU 架构签名字段 (FileHeader.Machine) 为 IMAGE FILE MACHINE THUMB 或 IMAGE FILE MACHINE ARM 时的情况判断, 使得 ARM 处理器的可执行 文件能够被加载运行。
     第四, ITEMIDLIST 数据结构的存储位置修正需要修改 ILGetSize 和 ILGetNext 函 数, 分别都要在计算 ITEMIDLIST 数据结构大小时增加对 _insigma_align 函数的调用, _
     insigma_align 函数的定义如下 :
     以上函数被 _Insigma_ 宏定义的条件编译包围, 即定义了 _Insigma_ 宏后才提供 存储位置修正。 _insigma_align 函数提供的修正方法是若 abID 数组的大小为奇数的话, 就 在此数值上加 1, 使其与长字或字的边界对齐。
     修改后的 ILGetSize 函数和 ILGetNext 函数如下 :
     以上两个函数在计算 SHITEMID 数据结构大小时根据是否定义了 _Insigma_ 宏来 决定是否调用 _insigma_align 函数获得修正后的 SHITEMID 数据结构大小或下一 SHITEMID 数据结构的起始地址。
    

将WINE从X86移植到ARM平台的方法.pdf_第1页
第1页 / 共11页
将WINE从X86移植到ARM平台的方法.pdf_第2页
第2页 / 共11页
将WINE从X86移植到ARM平台的方法.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《将WINE从X86移植到ARM平台的方法.pdf》由会员分享,可在线阅读,更多相关《将WINE从X86移植到ARM平台的方法.pdf(11页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102364442A43申请公布日20120229CN102364442ACN102364442A21申请号201110173905522申请日20110624G06F9/44520060171申请人浙大网新科技股份有限公司地址310030浙江省杭州市三墩西园八路1号浙大网新软件园A楼15层72发明人毛德操王承志徐鼎鼎陈天洲俞立呈74专利代理机构杭州宇信知识产权代理事务所普通合伙33231代理人张宇娟54发明名称将WINE从X86移植到ARM平台的方法57摘要本发明公开了一种将WINE从X86移植到ARM平台的方法。WINE能够在其他操作系统中模拟WINDOWS应用的执行环境。

2、,从而可在其他操作系统中直接运行WINDOWS二进制程序。本发明提出的方法包括以下步骤1将X86汇编代码改写为ARM汇编代码;2增加ARM的CONTEXT数据结构表示ARM上的寄存器上下文;3增加对ARM可执行映像中CPU架构签名支持;4修正ITEMIDLIST数据结构存储位置,保证内存地址对齐。本发明使得WINE能够在使用ARM平台的系统如大量的嵌入式系统上运行,让大量WINDOWS程序在各种嵌入式平台上能直接运行,从而降低各种已有应用的部署成本。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书1页说明书8页附图1页CN102364461A1/1页21将WINE从X8。

3、6移植到ARM平台的方法,其特征是11、改写X86汇编代码为ARM汇编代码;12、增加ARM的CONTEXT数据结构,表示ARM处理器上的寄存器上下文;13、增加对ARM架构可执行映像PE文件头CPU架构签名的支持,使WINE能识别ARM可执行映像;14、对ITEMIDLIST数据结构的存储位置进行修正,保证其内存地址是与长字或字的边界对齐的。2根据权利要求1所述的方法,其特征在于,改写X86汇编代码为ARM汇编代码的方法为21、将X86汇编指令的指令逐条改写为对应的ARM汇编指令,并将操作数改为ARM的寄存器;22、对于不存在对应ARM汇编指令的X86汇编指令,使用多条ARM汇编指令以实现与。

4、对应X86汇编指令相同的功能。3根据权利要求2所述的方法,其特征在于,需要改写的汇编代码包括LOADER/PRELOADERC中的所有汇编代码;LIBS/WINE/PORTC中的WINECALLONSTACK函数;LIBS/WINE/PORTC中的WINESWITCHTOSTACK函数。4根据权利要求1所述的方法,其特征在于,增加ARM架构可执行映像PE文件头CPU架构签名的支持方法具体为增加对文件头中ARM架构签名的判断,允许ARM架构可执行映像被装载执行。5根据权利要求1所述的方法,其特征在于,对ITEMIDLIST数据结构的存储位置进行修正,若ITEMIDLIST数据结构的大小为奇数,则。

5、计算地址时在原来的地址上加1,使得数据结构的地址总是偶数对齐的。权利要求书CN102364442ACN102364461A1/8页3将WINE从X86移植到ARM平台的方法技术领域0001本发明涉及计算机运行环境模拟器领域、操作系统领域和CPU体系结构领域,尤其是将WINE从X86移植到ARM平台的方法。背景技术0002MICROSOFTWINDOWS简称WINDOWS是目前桌面电脑上常见的操作系统,有多个不同的版本,适用于个人电脑、工作站和服务器。WINDOWS系列操作在桌面电脑市场的占有率于2010年底达到90以上,可见其普及率和受欢迎程度。WINDOWS之所以这么受到用户欢迎的一大原因就。

6、是WINDOWS平台上的应用软件非常多,大部分的软件开发商都愿意首先为WINDOWS平台开发应用,而很多用户不愿意切换到其他操作系统就是因为其他系统上没有用户所需的某个应用或令用户满意替代版本。0003ARM架构处理器是目前非常流行的一种处理器架构,其精简指令集RISC的设计比起桌面电脑处理器中常见的X86的复杂指令集CSIC更加高效,能耗也更低。因此目前很多嵌入式设备或移动设备如智能手机大多都采用了ARM架构的处理器。然而由于ARM的指令集与X86指令集完全不同,无法在ARM处理器上运行传统桌面电脑的WINDOWS操作系统,因而也无法运行WINDOWS操作系统中的众多软件。0004WINE是。

7、一个在X86处理器上的模拟运行环境,利用WINE可在其他操作系统通常为类UNIX的操作系统如LINUX中直接运行WINDOWS的可执行程序。因此利用WINE能够在不同操作系统上直接获得WINDOWS环境下丰富的应用资源,很多WINDOWS应用不需要进行任何修改不需要重新编译就能直接在WINE中运行,并且保持较高的运行效率。然而WINE只支持X86的处理器架构,并不支持ARM,因而无法在目前众多基于ARM的设备上运行。发明内容0005本发明提出一种将WINE从X86移植到ARM平台的方法,从而使得ARM平台上也能运行众多的WINDOWS程序,应用开发商能够快速地将原有的应用部署到目前众多的基于A。

8、RM的设备中,获得更多经济效益。0006要将原为X86架构CPU编写的WINE模拟器移植到ARM架构的CPU上,首先需要解决的问题就是把X86指令集的机器代码转换为ARM指令集的机器代码。对于使用C等高级语言编写的源代码,只需要在PC上使用生成ARM架构机器代码的编译器交叉编译即可。但WINE为了更有效地控制底层硬件,有一部分源代码是使用汇编代码编写的,由于汇编代码是与CPU指令集有关的,因此需要手工将这些汇编代码改写成ARM指令集的汇编代码。具体的方法是将X86汇编的指令逐条改写为对应的ARM汇编指令,并将指令中的操作数从X86寄存器改为ARM寄存器。由于X86指令集和ARM指令集的差异性,。

9、对于不存在对应ARM汇编指令的X86指令,需要使用多条ARM汇编指令来实现对应与对应X86汇编指令相同的功能。说明书CN102364442ACN102364461A2/8页40007所要改写的汇编代码有以下几部分0008LOADER/PRELOADERC中的所有汇编代码;0009LIBS/WINE/PORTC中的WINECALLONSTACK函数;0010LIBS/WINE/PORTC中的WINESWITCHTOSTACK函数。0011另有一些数据结构并不是汇编指令,但也与具体的CPU有关。WINE中的CONTEXT数据结构用于表示CPU的寄存器上下文,寄存器上下文指某一时刻CPU所有寄存器的。

10、值,存储CPU在这一时刻的状态。不同的CPU具有不同的寄存器集合,所以表示它们的寄存器上下文的CONTEXT数据结构也不同。WINE在WINE/INCLUDE/WINNTH中提供了ARM的CONTEXT数据结构定义,但代码中却并没提供有关的代码实现,需要加以补充,增加ARM寄存器上下文保存、恢复、复制以及具体寄存器值提取的函数。0012WINE中运行的WINDOWS可执行映像格式为PEPORTABLEEXECUTABLE,其文件头中有一个字段指明此可执行文件是针对哪一种CPU的,称为CPU架构签名。对于ARM处理器,这个字段的值为IMAGEFILEMACHINEARM或IMAGEFILEMAC。

11、HINETHUMB,这两个常数的值分别是0X01C0和0X01C2。WINE不能识别这两个CPU架构签名,所以无法装载或运行ARM的可执行映像。因此要添加对这种CPU架构签名的支持,需要修改KERNEL32/PROCESSC。0013定义在INCLUDE/SHTYPESIDL中的数据结构ITEMIDLIST如下00140015其中SHITEMID的定义为00160017这里数组ABID的大小可变,其大小记录在字段CB中,这个数组用来存放文件名。当文件名的长度为奇数时,数据结构SHITEMID的大小是奇数,从而ITEMIDLIST的大小也是奇数,因而不与长字或字的边界对齐。在实际使用中,好几个S。

12、HITEMID数据结构会首尾相连叠在一起,形成一个列表。这样,如果第一个SHITEMID数据结构的大小是奇数,第二个SHITEMID数据结构的起点就不与长字或字的边界对齐了。X86处理器允许这样的不对齐的地址访问,但ARM处理器只允许与长字或字边界对齐的内存访问,否则就不保证操作的正确性。由于这个原因,当CPU从非对齐的SHITEMID数据结构中读取其CB字段的数值说明书CN102364442ACN102364461A3/8页5时,所得到的可能是个错误的数值。本发明通过对有关的函数ILGETSIZE、ILGETNEXT进行修改来解决这个问题,ILGETSIZE函数用于获得单个SHITEMID数。

13、据结构的大小,ILGETNEXT函数用于获得SHITEMID数据结构组成的列表中某一项的下一项地址。修改方法为在ILGETSIZE函数计算单个SHITEMID结构大小以及ILGETNEXT函数计算下一项地址时,新增一个_INSIGMA_ALIGN函数计算CB部分的大小,其计算方法是如果ABID数组的大小为奇数的话,就在此数值上加1,使其与长字或字的边界对齐。通过复制一组SHITEMID数据结构形成一个列表的时候,实际复制的长度取决于ILGETSIZE函数的返回值,而返回值经过了_INSIGMA_ALIGN函数调整,地址一定是偶数。因此在一个列表中,每一个SHITEMID数据结构的起点就都是与长。

14、字或字的边界对齐的,解决了ARM处理器访问内存时边界必须对齐的问题。附图说明0018图1是本发明实施例的将WINE从X86移植到ARM平台的流程图。具体实施方式0019如图1所示。本实施例的将WINE从X86移植到ARM平台的流程包括如下步骤0020第一,将X86汇编的指令逐条改写为对应的ARM汇编指令,并将指令中的操作数从X86寄存器改为ARM寄存器。由于X86指令集和ARM指令集的差异性,对于不存在对应ARM汇编指令的X86指令,需要使用多条ARM汇编指令来实现对应与对应X86汇编指令相同的功能。0021具体的实现方法是通过增加宏定义_ARM_来在编译时控制编译ARM专用的代码,因此ARM。

15、的汇编代码会被检测_ARM_宏是否定义的条件编译语句包围。由于有较多的源代码涉及到X86汇编代码到ARM汇编代码的转换,因此这里只针对LIBS/WINE/PORTC中的WINE_CALL_ON_STACK函数进行举例说明。WINE_CALL_ON_STACK函数在转换后的代码如下0022说明书CN102364442ACN102364461A4/8页60023以上代码保留_I386_宏的条件编译指令包围的X86的汇编代码X86的具体代码使用“”省略,新增用_ARM_宏的条件编译指令包围的ARM汇编代码,其代码内容是将X86的对应指令按照功能改写为ARM汇编指令。0024第二,增加ARM表示寄存器。

16、上下文的CONTEXT数据结构步骤如下00251、在DLLS/NTDLL目录下创建名为SIGNAL_ARMC的文件,其中需要实现与原说明书CN102364442ACN102364461A5/8页7SIGNAL_I386C相同的函数,包括SAVE_CONTEXT、RESTORE_CONTEXT等函数。00262、在DLLS/NTDLL/THREADC中有个函数COPY_CONTEXT,需要增加对ARM的CONTEXT与X86的CONTEXT中不同的字段的复制代码。00273、在WINESERVER的代码中,需要在SERVER目录下面创建名为CONTEXT_ARMC的文件,其中需要实现与原CONT。

17、EXT_I386C相同的函数,例如COPY_CONTEXT、GET_CONTEXT_IP等函数。0028第三,增加对ARM架构可执行映像PE头文件CPU架构签名支持的具体方法是修改KERNEL32/PROCESSC中的START_PROCESS函数为002900300031以上代码中增加了对头文件的CPU架构签名字段FILEHEADERMACHINE为IMAGEFILEMACHINETHUMB或IMAGEFILEMACHINEARM时的情况判断,使得ARM处理器的可执行文件能够被加载运行。0032第四,ITEMIDLIST数据结构的存储位置修正需要修改ILGETSIZE和ILGETNEXT函数。

18、,分别都要在计算ITEMIDLIST数据结构大小时增加对_INSIGMA_ALIGN函数的调用,_说明书CN102364442ACN102364461A6/8页8INSIGMA_ALIGN函数的定义如下00330034以上函数被_INSIGMA_宏定义的条件编译包围,即定义了_INSIGMA_宏后才提供存储位置修正。_INSIGMA_ALIGN函数提供的修正方法是若ABID数组的大小为奇数的话,就在此数值上加1,使其与长字或字的边界对齐。0035修改后的ILGETSIZE函数和ILGETNEXT函数如下00360037说明书CN102364442ACN102364461A7/8页90038说明书CN102364442ACN102364461A8/8页100039以上两个函数在计算SHITEMID数据结构大小时根据是否定义了_INSIGMA_宏来决定是否调用_INSIGMA_ALIGN函数获得修正后的SHITEMID数据结构大小或下一SHITEMID数据结构的起始地址。说明书CN102364442ACN102364461A1/1页11图1说明书附图CN102364442A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1