CN1947094A - 用于有条件地缩小可执行模块的系统和方法 - Google Patents
用于有条件地缩小可执行模块的系统和方法 Download PDFInfo
- Publication number
- CN1947094A CN1947094A CNA2005800132175A CN200580013217A CN1947094A CN 1947094 A CN1947094 A CN 1947094A CN A2005800132175 A CNA2005800132175 A CN A2005800132175A CN 200580013217 A CN200580013217 A CN 200580013217A CN 1947094 A CN1947094 A CN 1947094A
- Authority
- CN
- China
- Prior art keywords
- header portion
- image file
- section header
- pruned
- loaded
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44573—Execute-in-place [XIP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/63—Image based installation; Cloning; Build to order
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Facsimiles In General (AREA)
Abstract
本发明的实施方案是涉及缩小或优化可执行映像的系统和方法,其结果是储存空间的节省。在至少一个实施方案中,本发明在将映像储存到用于目标平台的闪存上之前从可执行映像头部移除不必要的字段或信息。与目标平台无关的信息的移除允许可执行体占据闪存存储器上更少的空间。当映像被加载时,基于优化的头部信息来解释所述映像。在实施方案中,所述映像可以进一步被已知的方法压缩,以节省额外的空间。描述了其他实施方案并且主张了对它们的权利要求。
Description
发明领域
本发明的实施方案一般地涉及格式化代码映像文件,并且更具体地,涉及在将映像储存到闪存存储器中之前,通过省略通用头部中不必要的字段来缩短要被储存到闪存存储器中的代码映像文件的长度(缩小代码映像文件)。
背景信息
存在各种用于格式化和压缩二进制代码映像以储存到储存设备中的机制。在本文中,二进制代码映像通常是可执行映像,或者是例如在个人计算机(PC)上,或在固件等等中,或在其中计算机程序被用来完成某些任务的任何处理系统上执行的任何映像。在处理器上被执行的任何映像必须具有标准格式,从而目标处理器固件可以识别:该映像可以从闪存存储器被执行,或被加载到存储器中,或以另一种方式被执行。在现有PC系统中使用的用于可执行映像的通用标准是标题为“Microsoft Portable Executable and Common ObjectFile Format Specification(微软可移植可执行和通用对象文件格式规范)”(修订版6.0,Microsoft公司,1999年2月)的可移植可执行通用对象文件格式(PE/COFF)规范,并且可以在万维网
http://www.microsoft.com/whdc/hwdev/hardware/PECOFF.mspx上找到。该格式是可移植的,因为格式化的文件想要在不同目标上被执行。例如,PE/COFF映像可能在WIN/CE环境以及WindowsXP环境两者中被执行。只要目标处理器识别PE/COFF格式,该处理器就可以执行该PE/COFF格式化的映像。
为了在不同平台上执行,PE/COFF映像必须包含与可能的目标平台和操作系统相关的具体信息。因此,在PE/COFF映像中可以存在并不是与每个可能的目标平台相关的信息。并非所有字段将被应用到所有平台。
例如,PE/COFF映像可以是设备驱动器(driver)。设备驱动器可以驻留在闪存存储器中。期望缩减闪存存储器中设备驱动器的大小以节省储存设备上宝贵的空间。在现有系统中,空间节省技术常常限于映像内容的压缩。在一些情况下,包括头部的整个映像文件被压缩。
设备驱动器映像通常被开发成在多个计算平台上可用。具有一个可执行体(executable)为厂家缩减配置和开发/维护成本。可能通过包括指针或虚拟地址,映像的头部可以指示不同的模块或例程适用于不同的平台。一些可执行体必须从闪存存储器中的实际地址被执行。例如,这些可执行体被称为XIP(就地执行(eXecute In Place)),并且不能被重定位。其他可执行体可以被重定位到存储器。该信息可以被包括在PE/COFF映像本身中。
在现有系统中,PE/COFF映像被传递到多个平台,并且被加载到目标平台上的闪存存储器中。如果映像具有XIP类型,则该映像不能在闪存存储器上被压缩,因为该映像必须从闪存存储器被执行。因此,驻留在闪存存储器上的信息必须是直接可执行的指令。其他映像可以在被加载到闪存存储器之前被压缩。存在着各种本领域已知的用于在写闪存存储器之前压缩可执行映像的方法。
附图简要说明
从本发明的以下详细描述中本发明的特征和优点将变得清楚,其中:
图1是根据本发明的实施方案,表示PE/COFF映像并图示用于缩小映像头部的示例性方法的框图;
图2是根据本发明的实施方案,表示被部分地减小或优化的PE/COFF节(section)头部的框图;
图3示出指示图2的节头部是呈它们的默认形式还是被优化的表;
图4和5图示使用本发明的实施方案节省的空间;
图6是根据本发明的实施方案示出用于使用缩小或优化的PE/COFF映像的示例性方法;以及
图7是根据本发明的实施方案示出用于重构修剪的代码映像文件的示例性系统。
详细说明
本发明的实施方案包括涉及缩小或优化可执行映像的系统和方法,其结果是储存空间的节省。在至少一个实施方案中,本发明想要在储存到用于目标平台的闪存存储器中之前从可执行映像头部移除不必要的字段或信息。与目标平台不相关的信息的移除允许可执行体在闪存存储器中占据较少的空间。当映像被加载时,基于优化的头部信息来解释该映像。在实施方案中,映像可以进一步被已知的方法压缩以节省额外的空间。
在说明书中提及本发明的“一个实施方案”或“实施方案”意味着结合该实施方案描述的特定特征、结构或特性被包括在本发明的至少一个实施方案中。因此,短语“在一个实施方案中”在整篇说明书中不同地方的出现不一定全是指同一实施方案。
存在着各种用于缩减可执行映像大小的方法。为了解释说明和简单起见,以下的实施方案在PE/COFF映像的背景下描述。本领域普通技术人员将清楚,这里描述的系统和方法可以用于其他映像格式,例如ELF映像或Mach-O格式化的映像。ELF(可执行和链接格式(Executable and Linking Format))可以用于Linux操作系统,并且最初由Unix系统实验室开发。关于ELF的更多信息可以在http://www.gsp.com/cgi-bin/man.cgi?section=5&topic=elf的Linux手册参考页中找到。Mach-O格式被苹果计算机操作系统使用。关于该格式的更多信息可以被找到,如在苹果计算机有限公司2003年8月7日的“Mach-O Runtime Architecture(Mach-O运行时体系结构)”(第三章Mach-O文件格式参考)中所描述的(参见ht
tp://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/)。
本系统和方法的实施方案有效地修剪可执行映像,由此使得映像大小能够被缩减(或缩小)。本发明的实施方案不同于压缩,因为压缩的项目可以被重组成原始状态。缩小的可执行体以定制的方式被缩减,并且一些与目标平台不相关的数据(或字段)可以被丢弃。经修剪后,映像可以使用已知的方法被进一步压缩。
本发明的实施方案可以在将可执行映像加载到闪存存储器之前从所述可执行映像移除内容。不相关的数据可以被移除,并且所述映像的可应用子集被定义为针对目标平台的标准。所定义的子集被用来压缩和加载映像。这可以导致更小的映像,从而节省储存设备上的空间。所公开的系统和方法的实施方案可以附加到现有压缩技术。此外,所公开的系统和方法可以应用于已被压缩的映像。
现在参照附图,并且具体地参照图1,图1示出PE/COFF映像。PE/COFF映像包括COFF头部110、PE头部120、节头部160和映像内容180。在一个实施方案中,COFF头部110可以包括七个字段(20个字节):machine 111、NumberofSections 112、TimeDateStamp 113、PtrToSymbol 114、NumSymbols 115、SizePEHdr 116和Characteristics117。下面的表1根据PE/COFF规范图示COFF头部中每个字段的偏移(offset)和长度。在这20个字节中,目标平台可能只需要访问字段:machine111、NumberofSections 112、SizePEHdr 116和Characteristics 117,只使用八个字节。用于PE头部120的末尾的地址偏移可以由COFF头部110中指定PE头部大小的值(即在偏移16处的SizePEHdr 116)来确定。节头部160的大小可以通过将节的数量乘以节的长度来确定,所述节的数量可以是在COFF头部的偏移2处16位的值(即NumberOfSections 112)。在本实施例中,默认节是40个字节长。
偏移 | 大小 | 字段 |
0 | 2 | Machine |
2 | 2 | NumberOfSections |
4 | 4 | TimeDateStamp |
8 | 4 | PointerToSymbolTable |
12 | 4 | NumberOfSymbols |
16 | 2 | SizeOfOptionalHeader |
18 | 2 | Characteristics |
表1COFF头部字段偏移
在本实施例中,PE头部120包括字段:Signature 121、MajorVersion 122、MinorVersion123、SizeOfCode 124、SizeOfInitdData 125、SizeOfUnInitdData 126、EntryPoint 127、BaseOfCode 128、BaseOfData 129、ImageBase 130、SectionAlignment 131、FileAlignment132、MajorOSVersion 133、MinorOSVersion 134、MajorImageVersion 135、MinorImageVersion 136、MajorSubVersion 137、MinorSubVersion 138、Win32Version 139、ImageSize 140、HeaderSize 141、CheckSum 142、Subsystem 143、DllChar 144、StackReserveSz145、StackCommitSz 146、HeapReserveSz 147、HeapCommitSz 148、LoaderFlags 149和NumberOfRVASz 150。在本实施例中,PE头部120包括108个字节。对于一些平台,只需要PE头部120的22个字节:Signature 121、SizeOfCode 124、EntryPoint 127、BaseOfCode128、ImageBase 130和Subsystem 143。因此,PE头部可以被缩减86个字节,成为22个字节。
在本实施例中,节头部160包括以下字段的多个集合(针对每个节有一个集合),所述字段为:Name 161、Virtsize 162、VirAddr 163、RawDataSz 164、PointertoRawData 165、PointertoRelocations 166、PointertoLineNums 167、NumofRelocs 168、NumofLineNums 169以及Characteristics 170(总共40个字节)。对于一些平台,只有字段:Name 161、RawDataSz164、PointertoRawData 165、PointertoRelocations 166和NumofRelocs 168,总共21个字节被使用。所述Name字段可以被预先分配成允许32个节,即一个开销字节和32位数据。因此,消除不使用的字段每个节可以节省19个字节。
在一个实施方案中,第一节头部将总是具有Name字段。在许多情况下,第一节示出第一字节为0值(通常无效),并且剩余四个字节是关于哪些节被优化/缩小而哪些节未被优化/缩小的32位掩码。然而,可能第一节未优化。在这种情况下,第一节将不具有为0的第一字节。换句话说,Name字段将与PE/COFF规范一致,并且是在其中具有某个实际名称的八字节字段。在这种情形下,下一优化的节头部将是剩余节状态的指示符,并且该下一节头部将具有Name字段(五个字节)。在前n个节头部为未优化的情况下,则第n+1个节头部将在Name字段中具有位掩码。一旦掩码出现在一节头部Name字段中,那么在后续的优化节头部中就不必要具有Name字段。一些实施方案可以在所有节头部中使用Name字段,以保持一致。应该注意到在本讨论中,所使用的字节和所要求的字段仅仅是用于图示说明。其他系统可以使用针对头部的不同格式,或要求不同的字段。
图2示出在具有四个节210、220、230和240的映像中被缩减为排除不需要的字段的PE/COFF节头部的示意图。在本实施例中,节头部1、3和4(210、230和240)是优化或缩小的。节头部2使用如格式标准所定义的默认字段。如在图2中看到的,节1(210)包括Name字段161,而节3和4(230,240)不包括Name字段。如图1中所示,优化的节头部中的每个还包括四个字段164、165、166和168。如以下将更充分地描述的,Name字段161具有特殊的重要性。
在一个实施方案中,在第一节头部210中使用Name字段161来标识哪些节头部是优化的,以及哪些节头部使用完整的默认格式。图3示出定义接下来的节是优化或修剪的,还是正使用默认格式的表300。例如,在一个实施例中,映像具有n个节,即1到n。第一节301是优化的。第二节303使用默认格式。第三和第四节(305、307)是优化的,诸如此类,直到第n节309是优化的。在一些实施方案中,该表可以以掩码字来实现,其中1-位(1b,1-bit)指示节是优化的,并且0-位(0b,0-bit)指示节使用默认格式。该掩码或头部可以被预先设计(pre-pended)到映像文件中,或定位在映像中的另一个预先确定的偏移(已知)上,例如重载(overload)映像中未使用的字段,即Name字段161。在本实施例中,如图3中所示,节1-4由1011b表示,其中最低有效位被用于第一节301。
术语“优化”具有与映像要被加载到的平台相关的具体含义。可以存在处理映像并随后将它们加载到存储器中的代理(agent)或重构器(reconstructor)。代理基于该位掩码来解释节。因此,如果节是优化的,代理将了解在节中使用了多少字节和哪些字段。在实施方案中,节1(301)的Name字段161被用来将图3的表储存为位图。这允许代理标识默认的节和优化的节,而无需给映像文件增加额外的开销。例如,以字节0开始的Name字段161可以被解释为已被用来储存优化表的Name字段。如果第一字节非0,那么代理以默认/传统格式读入映像。
在现有系统中,在PE/COFF映像中常常不超过16节。因此,在使用Name字段161来保存优化表的实施方案中,只需要两个字节来传达掩码信息。在PE/COFF规范中,Name字段被定义为8个字节。在实施方案中,为所述表而保留4个字节以允许多达32个节。因此,只使用五个字节来用于Name字段。在一个实现中,第一字节是指示该字段是否是作为表来使用的标志,四个字节被用于所述的表,并且Name字段的剩余三个字节可以用作其他用途,或被省略。
现在参照图4,示出了处理过的PE/COFF映像400的表示。在一个实施例中,PE/COFF头部从129个字节(参见图1)被缩减到30个字节(401),并且节头部区域403从40*n个字节被缩减到21*n个字节,其中n是节的数量。尽管所述节省表面上看可能是不显著的,但闪存存储器可以包括许多映像。如果对于许多被加载到闪存存储器上的映像来讲,空间节省是可获得的,那么更多的空间可以用于额外的映像,或者闪存卡的大小可以被缩减。空间节省可以随目标平台而改变,因为每个平台可能需要不同的字段集合。针对除PE/COFF之外的映像格式(例如ELF和Mach-O)的空间节省也将随着格式和目标平台而改变。
图5是示出使用所公开的系统和方法的实施方案的空间节省的闪存存储器的表示。根据一个实施例,示出了处理前(510)和处理后(520)的整个闪存映像。未经处理的闪存映像510可以包括专用于XIP代码的65536个字节(511)和专用于非XIP代码的458752个字节(513)。在闪存存储器上的处理过的映像中,XIP映像是未压缩的,但根据本发明的实施方案,XIP映像仍然可以是可修剪的。因此,传统的方法将需要65536个字节以用于所述映像的该区域,而修剪的或优化的XIP区域可以只需要个61180字节(521)。类似地,在本实施例中,使用传统格式,非XIP代码可能需要458752个字节(513),但在修剪后只需要450403个字节(523)。应该注意到,XIP代码可能不被压缩,因此以传统的方法,空间节省是不可能的。
现在参照图6,根据本发明的实施方案示出了图示示例性方法600的流程图,所述方法600用于加载处理过的或修剪的映像。一旦引导或系统通电(框601),可执行映像可以从闪存存储器被加载。在框603中做出关于固件模块是否要从闪存存储器被获取的确定。如果没有模块要被获取,处理在框605中以正常的操作继续,直到在框603中必须确定固件模块是否要从闪存存储器被获取。
如果固件模块要从闪存存储器被获取,那么在框607中分配具有足够大小的存储器缓冲区(buffer)用于储存映像/模块。映像大小被储存在该映像中,并且如果未曾修剪,所述大小被储存在PE头部中。映像的大小对于非修剪映像来说从PE头部确定,或者映像的大小从默认和优化信息来计算。在框609中重构主导的(leading)头部文件。对于示例性的PE/COFF映像,用种子化信息(seeded information)来重构原始的PE和COFF头部以填补被修剪的信息的空缺。换句话说,具有原始大小的头部被重构,从而当映像在存储器中时,映像占据与如果数据未被修剪将占据的空间相同的空间。这样的话传统(legacy)软件可以读取所述映像。在一些实施方案中,PE/COFF(或其他格式)头部被修剪,但节头部数据仅仅被部分地修剪或根本不被修剪。
在一个实施方案中,第一节头部用优化(修剪)掩码来重载Name字段。在框611中确定映像是否已被修剪。在本实施例中,该确定查看第一节的Name字段。如果第一字节为0,那么映像已被修剪并且掩码位于Name字段中。如果Name字段的第一字节非0,那么映像呈默认格式,并且可以以传统方式被加载,即每次加载一个节。如果映像文件还未被修剪,那么在框613中第一节头部被拷贝到分配的存储器缓冲区。如果存在更多的节头部要加载,如在框615确定的,那么处理以框611继续,并且在框613中下一节头部被拷贝到存储器。本领域普通技术人员将清楚,在框611中做出的确定可能只需要被进行一次,并且随后可以设置标志以遍历多个节头部。流程图600中的循环(611,613,615)仅仅是例证性的,并且可以以各种方式来实现。
如果如在框611指示的映像已被修剪,那么在一个实施方案中,在框619中使用接着的四个字节作为位掩码来确定每一头部是呈优化还是默认格式。在框621,如在位掩码中所标识的,确定当前节头部是否被定义为优化的头部。如果不是,那么在框625中节头部被拷贝到分配的存储器,并且处理继续下一节头部。
如果节头部已被优化或修剪,那么所述头部必须被重构。为了与期望完整映像格式的传统程序相兼容,在框623中节头部被重构。剩余的字段被移动到对应于在映像格式(例如PE/COFF)中定义的偏移的位置。修剪的或删除/省略的字段以种子数据(seed data)来填充,或者被保持空白,并且被拷贝到原始文件格式中该字段的偏移位置。因此,重构的节头部将以与传统软件兼容的默认格式出现。按照定义,种子化字段(之前修剪的)对目标平台是的确不必要的,并且这些字段中的任何数据被忽略。处理继续进行,直到所有节头部已被拷贝到分配的存储器。
一旦所有节头部已被加载到存储器,那么在框617中映像文件的剩余部分被加载到存储器中。在框603处,处理继续加载可能存在的任何额外的映像文件。
如果映像是XIP,那么映像可以不被加载到主存储器中,而必须直接从闪存存储器被执行。正常地,XIP文件将从闪存存储器执行,并且兼容性不是严格地需要的,因为这些文件通常很大程度上是不可移植的。通常,它们在系统初始化的非常早期被使用,并且一旦平台已经进展到资源更加丰富的状态(即当存储器被发现并使用时)就不被引用。XIP映像如何被处理是取决于具体实现的。
现在参照图7,示出用于重构修剪的代码映像文件的示例性系统700。在一个实施方案中,处理器701具有系统存储器703,并且以可操作的方式耦合到闪存存储器705。在预引导处理期间,基本输入/输出系统(BIOS)711在处理器701中执行。在预引导期间的各个时刻,从闪存存储器获取代码映像文件715可能是必要的。在实施方案中,一个或更多个代码映像文件715可以驻留在闪存存储器705中。代码映像文件可以是修剪的映像文件715b,所述修剪的映像文件715b已经根据上面描述的方法被修剪或缩减,或者代码映像文件可以是原始代码映像文件715a。无论代码映像文件715是否也被修剪,它们可以被压缩。在修剪的代码映像715b的情况下,BIOS 711将控制传送给重构器721以便重构修剪的映像715b的头部。重构的代码映像713以可以被传统代码处理的形式置入系统存储器703中,其中传统代码不必要了解映像起初曾被修剪。传统代码处理重构的映像是可能的,因为该目标平台不需要曾从原始映像中被修剪的任何数据。
本文中描述的技术不限于任何特定的硬件或软件配置;它们可以在任何计算、消费电子或处理环境中找到适用性。所述技术可以以硬件、软件或这两者的组合来实现。所述技术可以以在可编程机器上执行的程序来实现,所述可编程机器例如移动或固定计算机、个人数字助理、机顶盒、蜂窝电话和寻呼机、消费类电子设备(包括DVD播放器、个人录像机、个人视频播放器、卫星接收器、立体声接收器、有线电视接收器),以及其他可以包括处理器、所述处理器可读的储存介质(包括易失性和非易失性存储器和/或储存部件)、至少一个输入设备和一个或更多个输出设备的电子设备。程序代码被应用到使用输入设备录入的数据,以执行所描述的功能并产生输出信息。输出信息可以应用到一个或更多个输出设备。本领域普通技术人员可以意识到,本发明可以以包括多处理器系统、微型计算机、大型计算机、独立消费类电子设备等等的各种系统配置来实践。本发明还可以以分布式计算环境来实践,其中任务可以由通过通信网络来链接的远程处理设备进行。
每个程序可以以高级的过程或面向对象编程语言来实现,以与处理系统通信。然而,如果需要,程序可以以汇编或机器语言来实现。在任何情况下,所述语言可以被编译或解释。
程序指令可以被用来导致以所述指令编程的通用或专用处理系统进行这里描述的操作。可替换地,所述操作可以由包含用于进行所述操作的硬连线逻辑的具体硬件组件,或由编程的计算机组件和定制的硬件组件的任何组合来进行。这里描述的方法可以被提供为可以包括其上存有指令的机器可访问介质的计算机编程产品,所述指令可以用来编程处理系统或其他电子设备以进行所述方法。使用在这里,术语“机器可访问介质”包括能够储存或编码指令序列的任何介质,所述指令序列由机器执行并且导致所述机器进行这里描述的方法中的任何一个。相应地,术语“机器可访问介质”包括但不限于,固态存储器、光或磁盘、以及编码数据信号的载波。此外,本领域中普遍地以提及呈一种形式或另一种形式的软件(例如程序、过程、进程、应用、模块、逻辑等)来表示发生动作或导致结果。这样的表达仅仅是表述由处理系统执行软件而导致处理器进行产生结果的动作的简便方式。
尽管已经参照示例性实施方案描述了本发明,但是该说明书不想要被解释成限制性的。本发明所属领域的技术人员将清楚,示例性实施方案的各种修改,以及本发明的其他实施方案被认为落在本发明的精神和范围内。
Claims (21)
1.一种用于加载映像的方法,包括:
分配具有足够大小的存储器缓冲区来保存可执行映像文件;
确定所述映像文件是否已被修剪;以及
将所述映像文件加载到所述存储器缓冲区中用于执行。
2.如权利要求1所述的方法,其中加载所述映像文件的操作还包括:
对于对应于所述映像文件的每个节头部,
如果所述映像文件已被修剪,那么
确定当前节头部是否已被修剪,并且如果是,那么从所述修剪的当前节头部重构当前标准格式的节头部,并且将所述重构的节头部加载到所述存储器缓冲区中,但如果所述当前节头部还未被修剪,那么将所述当前节头部加载到所述存储器缓冲区中;以及
如果所述映像文件还未被修剪,那么将每个节头部加载到所述存储器缓冲区中。
3.如权利要求1所述的方法,其中确定所述映像文件是否已被修剪的操作包括:
获取位掩码;以及
标识对应于所述映像文件的多个节头部,并且使用所述位掩码来确定每个标识的节头部是否已被修剪。
4.如权利要求3所述的方法,其中所述位掩码位于对应于所述映像文件的所述多个节头部的第一节头部的Name字段中。
5.如权利要求1所述的方法,其中加载所述映像文件的操作还包括:
将多个节头部加载到所述存储器缓冲区中;以及
将映像内容加载到所述存储器缓冲区中。
6.如权利要求5所述的方法,其中被加载到所述存储器缓冲区中的所述多个节头部中的每个包括默认格式的节头部和重构的节头部中的一个。
7.如权利要求5所述的方法,其中所述映像内容被标识为就地执行(XIP)代码。
8.如权利要求5所述的方法,其中所述映像内容是压缩的。
9.如权利要求1所述的方法,其中所述映像文件以针对第一目标平台的第一预先确定的格式被修剪,并且所述映像文件以针对第二目标平台的第二预先确定的格式被修剪。
10.一种包含用于加载映像文件的指令的机器可访问介质,当所述指令被执行时,引起所述机器:
分配具有足够大小的存储器缓冲区来保存可执行映像文件;
确定所述映像文件是否已被修剪;以及
将所述映像文件加载到所述存储器缓冲区中用于执行。
11.如权利要求10所述的介质,其中用于加载所述映像文件的所述指令还引起所述机器:
对于对应于所述映像文件的每个节头部,
如果所述映像文件已被修剪,那么
确定当前节头部是否已被修剪,并且如果是,那么从所述修剪的当前节头部重构当前标准格式的节头部,并且将所述重构的节头部加载到所述存储器缓冲区中,但如果所述当前节头部还未被修剪,那么将所述当前节头部加载到所述存储器缓冲区中;以及
如果所述映像文件还未被修剪,那么将每个节头部加载到所述存储器缓冲区中。
12.如权利要求10所述的介质,其中用于确定所述映像文件是否已被修剪的所述指令还引起所述机器:
获取位掩码;以及
标识对应于所述映像文件的多个节头部,并且使用所述位掩码来确定每个标识的节头部是否已被修剪。
13.如权利要求12所述的介质,其中所述位掩码位于对应于所述映像文件的所述多个节头部的第一节头部的Name字段中。
14.如权利要求10所述的介质,其中用于加载所述映像文件的所述指令还引起所述机器:
将多个节头部加载到所述存储器缓冲区中;以及
将所述映像内容加载到所述存储器缓冲区中。
15.如权利要求14所述的介质,其中被加载到所述存储器缓冲区中的所述多个节头部中的每个包括默认格式的节头部和重构的节头部中的一个。
16.如权利要求14所述的介质,其中所述映像内容被标识为就地执行(XIP)代码。
17.如权利要求14所述的介质,其中所述映像内容是压缩的。
18.一种用于加载映像文件的系统,包括:
在目标平台上的处理器,所述处理器具有系统存储器并且以可操作的方式耦合到闪存存储器设备;
储存在所述闪存存储器设备中的至少一个可执行映像文件;以及
重构器,所述重构器重构修剪的映像文件并且将所述修剪的映像文件加载到系统存储器中。
19.如权利要求18所述的系统,其中所述重构器确定所述至少一个可执行文件中的每个是否已被修剪,并且如果是,那么确定对应于所述修剪的可执行文件的节头部是否已被修剪,并且如果节头部已被修剪,那么以与所述目标平台一致的格式重构所述修剪的节头部。
20.如权利要求18所述的系统,其中储存在所述闪存存储器设备中的所述可执行映像文件中的至少一个已被修剪成与所述目标平台一致的格式。
21.如权利要求18所述的系统,其中一旦重构的映像文件已被加载到系统存储器中,那么所述映像文件以仿佛它未被从原始的映像文件修剪过的方式进行操作。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/832,789 | 2004-04-26 | ||
US10/832,789 US7853742B2 (en) | 2004-04-26 | 2004-04-26 | System and method to conditionally shrink an executable module |
PCT/US2005/012128 WO2005109848A2 (en) | 2004-04-26 | 2005-04-08 | System and method to conditionally shrink an executable module |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1947094A true CN1947094A (zh) | 2007-04-11 |
CN1947094B CN1947094B (zh) | 2010-05-26 |
Family
ID=35116084
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2005800132175A Active CN1947094B (zh) | 2004-04-26 | 2005-04-08 | 用于有条件地缩小可执行模块的系统和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7853742B2 (zh) |
EP (1) | EP1749266B1 (zh) |
JP (1) | JP4601665B2 (zh) |
CN (1) | CN1947094B (zh) |
WO (1) | WO2005109848A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101526902B (zh) * | 2008-12-25 | 2012-01-04 | 北京邮电大学 | 用于移动终端的可执行文件压缩及加载方法 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7853742B2 (en) | 2004-04-26 | 2010-12-14 | Intel Corporation | System and method to conditionally shrink an executable module |
KR100797122B1 (ko) * | 2007-04-20 | 2008-01-22 | 삼성전자주식회사 | 휴대 단말기의 이동식 저장 매체를 이용한 파일 처리 장치및 방법 |
US8392895B2 (en) * | 2009-01-13 | 2013-03-05 | Mediatek Inc. | Firmware extension method and firmware builder |
US8813048B2 (en) | 2009-05-11 | 2014-08-19 | Accenture Global Services Limited | Single code set applications executing in a multiple platform system |
US8832699B2 (en) | 2009-05-11 | 2014-09-09 | Accenture Global Services Limited | Migrating processes operating on one platform to another platform in a multi-platform system |
US9262416B2 (en) | 2012-11-08 | 2016-02-16 | Microsoft Technology Licensing, Llc | Purity analysis using white list/black list analysis |
US8752021B2 (en) * | 2012-11-08 | 2014-06-10 | Concurix Corporation | Input vector analysis for memoization estimation |
CN105528365A (zh) | 2014-09-30 | 2016-04-27 | 国际商业机器公司 | 用于管理可执行文件的方法和装置 |
CN104820612B (zh) * | 2015-05-22 | 2018-02-09 | 网宿科技股份有限公司 | 一种可执行文件的内存执行方法 |
US10185513B1 (en) | 2015-06-05 | 2019-01-22 | Life365, Inc. | Device configured for dynamic software change |
CN107450960A (zh) * | 2017-09-18 | 2017-12-08 | 珠海亿智电子科技有限公司 | 一种对可执行elf文件重新链接和加载的方法 |
RU2722239C1 (ru) | 2019-11-26 | 2020-05-28 | Общество с ограниченной ответственностью «ПИРФ» (ООО «ПИРФ») | Способ создания и использования формата исполняемого файла с динамическим расширяемым заголовком |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4389706A (en) * | 1972-05-03 | 1983-06-21 | Westinghouse Electric Corp. | Digital computer monitored and/or operated system or process which is structured for operation with an improved automatic programming process and system |
US5113494A (en) * | 1987-02-27 | 1992-05-12 | Eastman Kodak Company | High speed raster image processor particularly suited for use in an image management system |
US5335328A (en) * | 1989-06-28 | 1994-08-02 | International Business Machines Corporation | Methods for recording and reading data from a record member having data in any one of a plurality of block formats including determining length of records being transferred |
JPH03201082A (ja) | 1989-12-27 | 1991-09-02 | Daikin Ind Ltd | プルーニング方法およびその装置 |
US5481701A (en) * | 1991-09-13 | 1996-01-02 | Salient Software, Inc. | Method and apparatus for performing direct read of compressed data file |
US5841979A (en) * | 1995-05-25 | 1998-11-24 | Information Highway Media Corp. | Enhanced delivery of audio data |
US5889961A (en) * | 1996-06-27 | 1999-03-30 | International Business Machines Corporation | Disk drive having program to be executed by a second processor stored in a first processor's ROM in a compressed form |
US5923878A (en) * | 1996-11-13 | 1999-07-13 | Sun Microsystems, Inc. | System, method and apparatus of directly executing an architecture-independent binary program |
JPH10320205A (ja) * | 1997-05-20 | 1998-12-04 | Fujitsu Ltd | 情報処理装置 |
US6385567B1 (en) * | 1997-07-31 | 2002-05-07 | Microsoft Corporation | Program-module substitution in a program loader for multiple-platform emulation |
US6026238A (en) * | 1997-08-18 | 2000-02-15 | Microsoft Corporatrion | Interface conversion modules based upon generalized templates for multiple platform computer systems |
US6032197A (en) * | 1997-09-25 | 2000-02-29 | Microsoft Corporation | Data packet header compression for unidirectional transmission |
US6654954B1 (en) * | 1998-02-17 | 2003-11-25 | International Business Machines Corporation | Computer system, program product and method utilizing executable file with alternate program code attached as a file attribute |
JP2000076077A (ja) | 1998-09-03 | 2000-03-14 | Ricoh Co Ltd | 光ディスクドライブ制御システム |
US6272252B1 (en) * | 1998-12-18 | 2001-08-07 | Xerox Corporation | Segmenting image data into blocks and deleting some prior to compression |
JP3791742B2 (ja) * | 1999-05-28 | 2006-06-28 | 株式会社沖データ | Pciバス制御システム |
JP2001077953A (ja) | 1999-09-07 | 2001-03-23 | Fuji Xerox Co Ltd | 画像形成システム及び情報提供システム |
JP2001166941A (ja) | 1999-12-07 | 2001-06-22 | Sony Corp | 情報処理装置および方法、並びに記録媒体 |
JP4042280B2 (ja) | 1999-12-21 | 2008-02-06 | 富士ゼロックス株式会社 | 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 |
US6769115B1 (en) * | 2000-05-01 | 2004-07-27 | Emc Corporation | Adaptive interface for a software development environment |
US6775423B2 (en) * | 2000-05-03 | 2004-08-10 | Microsoft Corporation | Systems and methods for incrementally updating an image in flash memory |
GB2366643B (en) * | 2000-05-25 | 2002-05-01 | Siroyan Ltd | Methods of compressing instructions for processors |
US6574747B2 (en) * | 2000-06-02 | 2003-06-03 | Microsoft Corporation | Extensible execute in place (XIP) architecture and related methods |
JP2002108801A (ja) | 2000-09-29 | 2002-04-12 | Ricoh Co Ltd | 情報処理装置、画像読取装置、画像形成装置、画像データ記憶方法及びdma転送方法 |
US6845130B1 (en) * | 2000-10-12 | 2005-01-18 | Lucent Technologies Inc. | Motion estimation and compensation for video compression |
US6580759B1 (en) | 2000-11-16 | 2003-06-17 | Koninklijke Philips Electronics N.V. | Scalable MPEG-2 video system |
US6816616B2 (en) * | 2001-05-31 | 2004-11-09 | Webex Communications, Inc. | Header compression for image data stream |
JP3600189B2 (ja) | 2001-06-19 | 2004-12-08 | 松下電器産業株式会社 | パケット送受信装置及びパケット伝送方法 |
US6941547B2 (en) * | 2001-06-25 | 2005-09-06 | International Business Machines Corporation | Apparatus and method for porting applications to different platforms |
US6986148B2 (en) * | 2001-07-17 | 2006-01-10 | Appforge, Inc. | Methods and systems for providing platform-independent shared software components for mobile devices |
JP3959610B2 (ja) | 2001-12-13 | 2007-08-15 | 富士ゼロックス株式会社 | 画像処理装置及びプログラム |
US7197711B1 (en) * | 2002-01-31 | 2007-03-27 | Harman International Industries, Incorporated | Transfer of images to a mobile computing tool |
US7277482B2 (en) * | 2002-05-29 | 2007-10-02 | General Dynamics C4 Systems, Inc. | Method and apparatus for adaptive signal compression |
US7055145B2 (en) * | 2002-10-30 | 2006-05-30 | Intel Corporation | Dynamic management of execute in place applications |
JP4035429B2 (ja) | 2002-11-27 | 2008-01-23 | キヤノン株式会社 | 画像データ保管方法 |
JP3814592B2 (ja) | 2003-06-27 | 2006-08-30 | キヤノン株式会社 | 撮像装置及びその制御方法 |
US7549148B2 (en) * | 2003-12-16 | 2009-06-16 | Microsoft Corporation | Self-describing software image update components |
US7853742B2 (en) | 2004-04-26 | 2010-12-14 | Intel Corporation | System and method to conditionally shrink an executable module |
WO2007073610A1 (en) * | 2005-12-24 | 2007-07-05 | Intel Corporation | Method and apparatus for efficiently arranging portable executable (pe) images |
-
2004
- 2004-04-26 US US10/832,789 patent/US7853742B2/en active Active
-
2005
- 2005-04-08 JP JP2007509506A patent/JP4601665B2/ja not_active Expired - Fee Related
- 2005-04-08 CN CN2005800132175A patent/CN1947094B/zh active Active
- 2005-04-08 EP EP05733781.8A patent/EP1749266B1/en active Active
- 2005-04-08 WO PCT/US2005/012128 patent/WO2005109848A2/en not_active Application Discontinuation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101526902B (zh) * | 2008-12-25 | 2012-01-04 | 北京邮电大学 | 用于移动终端的可执行文件压缩及加载方法 |
Also Published As
Publication number | Publication date |
---|---|
JP4601665B2 (ja) | 2010-12-22 |
US7853742B2 (en) | 2010-12-14 |
WO2005109848A3 (en) | 2006-02-09 |
US20050251583A1 (en) | 2005-11-10 |
JP2007535241A (ja) | 2007-11-29 |
EP1749266B1 (en) | 2013-10-23 |
EP1749266A2 (en) | 2007-02-07 |
CN1947094B (zh) | 2010-05-26 |
WO2005109848A2 (en) | 2005-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1947094B (zh) | 用于有条件地缩小可执行模块的系统和方法 | |
US5740405A (en) | Method and system for providing data compatibility between different versions of a software program | |
US5940871A (en) | Computer system and method for selectively decompressing operating system ROM image code using a page fault | |
US8196129B2 (en) | Adaptive class loading | |
US6741978B1 (en) | Accessing file data stored in non-volatile re-programmable semiconductor memories | |
JP2007535241A5 (zh) | ||
CN1811768A (zh) | 用于协调图象元数据的系统和方法 | |
US10664279B2 (en) | Instruction prefetching in a computer processor using a prefetch prediction vector | |
CN110837531A (zh) | 数据源读写的分离方法、装置及计算机可读存储介质 | |
US20200089477A1 (en) | Program optimization by converting code portions to directly reference internal data representations | |
US20070028224A1 (en) | Program initiation methods and embedded systems utilizing the same | |
KR101036675B1 (ko) | Efi 기반 펌웨어에서의 프리 efi 초기화 모듈의 전역변수 사용법 | |
US6658658B1 (en) | Implicit forwarding and resolving of a reference made by an importing module to an exporting module for a specified export | |
CN115640078B (zh) | 基于虚拟文件系统数据智能预取的安卓应用加载优化方法 | |
US9471584B2 (en) | Demand paging method for mobile terminal, controller and mobile terminal | |
CN112035292A (zh) | 一种数据写入异常的处理方法、装置、设备及存储介质 | |
US6518973B1 (en) | Method, system, and computer program product for efficient buffer level management of memory-buffered graphics data | |
CN111581402A (zh) | 内容测试素材的生成方法、系统、电子设备、存储介质 | |
US20060230190A1 (en) | Method and apparatus for executing application in system having NAND flash memory | |
EP1632846A2 (en) | System and method for run-time value tracking during execution | |
CN111273956B (zh) | 一种程序模块加载方法、装置、设备及存储介质 | |
US7334111B2 (en) | Method and related device for use in decoding executable code | |
CN112214220A (zh) | 用于集成系统的方法、装置和设备 | |
CN1222874C (zh) | 动态链接的电脑系统中扩增程序功能的方法 | |
US9720666B2 (en) | Densely stored strings |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |