Modern smartphones (referred to as mobile devices) are especially powerful computing devices that utilize compiled code and data to perform various functions. Such compiled code and data are in the form of binaries that are loaded (or installed) onto the mobile device hardware, such as within internal memory for access by a processing unit. Binary code may include operating systems, bootstraps, functionality suites, executables, libraries, programs, and other processes needed by the mobile device to operate in its most essential capacities. Typically, the manufacturers of mobile devices (e.g., original equipment manufacturers or ‘OEMs’) install static binaries onto mobile devices that may be infrequently adjusted over time, such as by firmware updates.
Due to the essential nature of binaries to the operating of a mobile device, various entities may be interested in manipulating binaries to adjust the functionality set of the mobile device. For example, a third-party developer may wish to develop new features or upgrades to pre-existing binaries (e.g., virtual machine upgrades) and test them on end-user mobile devices to offer OEMs additional and vetted technologies (e.g., patches, new function suites, etc.). Further, parties may desire to adjust/access binaries to reverse engineer the binaries and promote new interoperability modifications (or mods). For example, modders may desire to jailbreak/root mobile operating systems to permit greater liberty in developing installed applications on smartphones. However, changing binaries will result in system failures if not implemented properly, as developers may inadvertently modify, remove, or otherwise disable essential functions established by OEMs. Although some modifications may be accomplished by copying the entire original content (or binaries), such solutions may include portions of the original binaries that aren't needed or that may not be selectively altered/customized/improved.
In an aspect, a computing device may perform a method to modify compiled binaries to achieve interoperability, and the method may include identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary, analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary, inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary, and generating a new library binary based on the code associated with the second library binary with the inserted portion of code. In an aspect, the portion of code may be one of an assembly code, binary code, and a data object. In an aspect, the missing function may be one of a method, routine, function, program, and application. In an aspect, identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary may include accessing the second library binary and obtaining diagnostic information from at least one of a linker software or a loader software. In an aspect, diagnostic information may include at least an error message. In an aspect, generating a new library binary based on the code associated with the second library binary with the inserted portion of code may include compiling a source code of the second library binary with a portion of a source code of the first library binary to generate the new library binary. In an aspect, the method may further include replacing the first library binary with the new library binary in a mobile device. In an aspect, the method may further include determining whether the identified portion of code corresponding to the missing function is position-independent, and generating a modification to the identified portion to remove dependencies on the first library binary, wherein the modification includes creating at least one of a new variable, a new pointer, and a new function. In an aspect, inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary may include configuring a specialized linker to use both the second library binary and the identified portion within the first library binary corresponding to the missing function, and generating a new library binary may include installing both the first library binary and the second library binary. In an aspect, analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary may be dynamically performed when the second library binary is implemented.
In another aspect, a computing device may be configured to modify compiled binaries to achieve interoperability and may include means for identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary, means for analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary, means for inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary, and means for generating a new library binary based on the code associated with the second library binary with the inserted portion of code. In an aspect, the portion of code may be one of an assembly code, binary code, and a data object. In an aspect, the missing function may be one of a method, routine, function, program, and application. In an aspect, means for identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary may include means for accessing the second library binary and obtaining diagnostic information from at least one of a linker software or a loader software. In an aspect, diagnostic information may include at least an error message. In an aspect, means for generating a new library binary based on the code associated with the second library binary with the inserted portion of code may include means for compiling a source code of the second library binary with a portion of a source code of the first library binary to generate the new library binary. In an aspect, the computing device may further include means for replacing the first library binary with the new library binary in a mobile device. In an aspect, the computing device may further include means for determining whether the identified portion of code corresponding to the missing function is position-independent, and means for generating a modification to the identified portion to remove dependencies on the first library binary, wherein the modification includes creating at least one of a new variable, a new pointer, and a new function. In an aspect, means for inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary may include means for configuring a specialized linker to use both the second library binary and the identified portion within the first library binary corresponding to the missing function, and means for generating a new library binary may include means for installing both the first library binary and the second library binary. In an aspect, means for analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary may be dynamically performed when the second library binary is implemented.
In another aspect, a computing device configured to modify compiled binaries to achieve interoperability may include a memory and a processor coupled to the memory, wherein the processor may be configured with processor-executable instructions to perform operations including identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary, analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary, inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary, and generating a new library binary based on the code associated with the second library binary with the inserted portion of code. In an aspect, the portion of code may be one of an assembly code, binary code, and a data object. In an aspect, the missing function may be one of a method, routine, function, program, and application. In an aspect, the processor may be configured with processor-executable instructions to perform operations such that identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary may include accessing the second library binary and obtaining diagnostic information from at least one of a linker software or a loader software. In an aspect, diagnostic information includes at least an error message. In an aspect, the processor may be configured with processor-executable instructions to perform operations such that generating a new library binary based on the code associated with the second library binary with the inserted portion of code may include compiling a source code of the second library binary with a portion of a source code of the first library binary to generate the new library binary. In an aspect, the processor may be configured with processor-executable instructions to perform operations further comprising replacing the first library binary with the new library binary in a mobile device. In an aspect, the processor may be configured with processor-executable instructions to perform operations that further include determining whether the identified portion of code corresponding to the missing function is position-independent, and generating a modification to the identified portion to remove dependencies on the first library binary, wherein the modification includes creating at least one of a new variable, a new pointer, and a new function. In an aspect, the processor may be configured with processor-executable instructions to perform operations such that inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary may include configuring a specialized linker to use both the second library binary and the identified portion within the first library binary corresponding to the missing function, and the processor may be configured with processor-executable instructions to perform operations such that generating a new library binary may include installing both the first library binary and the second library binary. In an aspect, the processor may be configured with processor-executable instructions to perform operations such that analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary may be dynamically performed when the second library binary is implemented.
In another aspect, a non-transitory processor-readable storage medium may have stored thereon processor-executable software instructions configured to cause a processor to perform operations for a computing device to modify compiled binaries to achieve interoperability including identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary, analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary, inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary, and generating a new library binary based on the code associated with the second library binary with the inserted portion of code. In an aspect, the portion of code may be one of an assembly code, binary code, and a data object. In an aspect, the missing function may be one of a method, routine, function, program, and application. In an aspect, the stored processor-executable software instructions may be configured to cause the processor to perform operations such that identifying a function associated with a first library binary that is missing within a second library binary without decompiling the first library binary may include accessing the second library binary and obtaining diagnostic information from at least one of a linker software or a loader software. In an aspect, diagnostic information includes at least an error message. In an aspect, the stored processor-executable software instructions may be configured to cause the processor to perform operations such that generating a new library binary based on the code associated with the second library binary with the inserted portion of code may include compiling a source code of the second library binary with a portion of a source code of the first library binary to generate the new library binary. In an aspect, the stored processor-executable software instructions may be configured to cause the processor to perform operations further comprising replacing the first library binary with the new library binary in a mobile device. In an aspect, the stored processor-executable software instructions may be configured to cause the processor to perform operations further including determining whether the identified portion of code corresponding to the missing function is position-independent, and generating a modification to the identified portion to remove dependencies on the first library binary, wherein the modification includes creating at least one of a new variable, a new pointer, and a new function. In an aspect, the stored processor-executable software instructions may be configured to cause the processor to perform operations such that inserting the identified portion of code corresponding to the missing function into a code associated with the second library binary may include configuring a specialized linker to use both the second library binary and the identified portion within the first library binary corresponding to the missing function, and the stored processor-executable software instructions may be configured to cause the processor to perform operations such that generating a new library binary may include installing both the first library binary and the second library binary. In an aspect, the stored processor-executable software instructions may be configured to cause the processor to perform operations such that analyzing the first library binary to identify a portion of code corresponding to the missing function without decompiling the first library binary may be dynamically performed when the second library binary is implemented.
The accompanying drawings, which are incorporated herein and constitute part of this specification, illustrate exemplary aspects of the invention, and together with the general description given above and the detailed description given below, serve to explain the features of the invention.
The various aspects will be described in detail with reference to the accompanying drawings. Wherever possible, the same reference numbers will be used throughout the drawings to refer to the same or like parts. References made to particular examples and implementations are for illustrative purposes, and are not intended to limit the scope of the invention or the claims.
The word “exemplary” is used herein to mean “serving as an example, instance, or illustration.” Any implementation described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other implementations.
The terms “mobile computing device” or “computing device” are used herein to refer to any one or all of cellular telephones, smart-phones (e.g., iPhone®), web-pads, tablet computers, Internet enabled cellular telephones, WiFi enabled electronic devices, personal data assistants (PDA's), laptop computers, personal computers, and similar electronic devices equipped with at least a processor.
The various aspects include methods of combining functionalities of software binaries to enable interoperability between binaries or applications not originally designed to operate with each other. In other words, the aspect methods may be performed to create new binaries that function or fit in different systems. The methods may enable the modification of a compiled binary (e.g., an application, a library, etc.) using portions of binary code from an original binary, such as by swapping out or adding in original binary code. Aspect methods may not integrate complete source code and libraries followed by compiling the combination, and thus may not require a thorough understanding of the original binary code. For example, an aspect method may be performed to insert a portion of “as is” binary code from the original library into a new library without accessing the entire source code of the original binary. The aspect methods may be implemented in a computing device in an automatic or near automatic process.
In an aspect, a computing device may store or otherwise access both a first and a second binary, such as two binary files compiled from different libraries of applications/functions. For example, the first binary file may include the original library of operating functions as provided by an OEM and the second binary file may be a new, custom library of operating functions subsequently generated by a third-party. The computing device may perform operations to identify necessary portions, segments, data, variables, blocks, functions, or other information included in the first binary but missing from the second binary (or the library of the second binary). For example, the computing device may perform an emulation program using both binaries to detect errors describing missing components/functions. As another example, the computing device may execute functions of the second binary (e.g., boot-up or load the second library binary) to obtain load/link errors or codes associated with missing and expected library functions. In an aspect, the computing device may obtain diagnostic information from linker software and/or loader software, such as an error message. However, the various aspects are not to debug code, but instead to automatically (or near automatically) create new binaries based on missing functionality.
In an aspect, the computing device may be configured to analyze the first binary to identify a position-independent portion (or self-contained portion) of the first binary associated with identified missing functions. For example, the computing device may identify a block of code in the first binary that does not reference, point to, or otherwise link to other variables, data, or information within other portions of the first binary. In an aspect, the computing device may be configured to use analytical processes, routines, and/or applications to analyze the assembly code of the first binary to identify relevant code segments. For example, the computing device may utilize a source code analyzer or software used for analyzing bugs/security that identifies functional blocks within binaries, such as embedded application binary interfaces. In various aspects, binaries may be analyzed statically or dynamically. In another aspect, the computing device may also be configured to utilize non-position-independent portions of the first binary associated with identified missing functions. For example, the computing device may be configured to generate new variables in target source code and/or utilizing specialized linkers based on the second and first binaries. In other words, non-position-independent portions of a first binary may be modified to be position-independent for use with the second binary.
Once the first binary is analyzed and the code associated with the missing functions is identified, the computing device may insert that code into the second binary (or a new binary in place of the missing code) in order to generate a new binary. The computing device may insert data statically at compile time of the new binary. In various aspects, the computing device may not insert data (e.g., binary of missing functions) based on predefined sections or patch-points within the second binary. In another aspect, the computing device may copy assembly code from the first binary into a codebase (or source code) associated with the second binary and compile it to create the new binary. Such copied assembly code may or may not be decompiled from a binary. In another aspect, the computing device may copy a binary data object from the first binary into the second binary (or binary code) in order to generate the new binary. Using aspect techniques, the computing device may bypass a dynamic linker, and instead may utilize a static linking process that incorporates the new binary. In other words, libraries associated with the first binary may be replaced, overwritten, revised, or supplemented in favor of the new binary, which now includes the functions identified as missing from the second binary.
In general, the various aspects are unlike normal linking techniques in that otherwise unsupported (or unknown) functions may be added to a binary based on analysis and selective copying of portions of other original binaries. Additionally, the various aspects may or may not utilize any decompiling operations when adding missing functionality to a binary.
In alternative aspects, the computing device may be configured to identify missing functions by dynamically scanning source binaries and libraries. For example, the computing device may be configured to perform operations to dynamically identify entry points in dynamically-loaded libraries (DLLs) as well as extract associated pieces of code for insertion in new libraries or code. In another aspect, the computing device may be configured to load both the first binary and the second binary and execute methods from either as appropriate. For example, the computing device may utilize a custom or specialized linker that links to two DLLs and selects functions from either, such as based on overloaded entries for particular functions.
In various aspects, the new binary may be installed or loaded into various devices for execution. The computing device may be configured to use the new binary, or alternatively, may perform operations to transmit and/or install the new binary to a mobile device. For example, the computing device that generated the new binary may transmit the new binary to a smartphone for installation within a manufacturing facility. The various aspect methods and resulting binaries may be utilized by any one or more computing devices in various combinations.
The various aspects may be applicable to and utilize various types of binaries. Thus, the term “library binary” is used herein for convenience and should be not be construed to limit the aspects to any particular format, content, application, and/or use of any binary code, executables, binary files, and/or other compiled data.
In an aspect, the devices 140, 138 may be configured to exchange signals via a direct data links 148. For example, the mobile computing device 138 may be connected to the server computing device 140 via a wired data link 148 (e.g., a serial connection, parallel connection, direct cable connection, USB cable, etc.) or a short-range wireless data link 148 (e.g., Bluetooth, Bluetooth LE, WiFi Direct, infrared, RF, Zigbee, Peanut, etc.). Using the direct data links 148, the server computing device 140 may exchange binaries, software, and instructions with the mobile computing device 138, such as commands for installing a modified binary corresponding to a mobile operating system (e.g., Android).
The devices 140, 138 may be configured to transmit signals to a router device 185 via a wireless data links 188 or wired data links 142. For example, the devices 140, 138 may be connected to or otherwise in communication with the router device 185 within a developer facility, manufacturing building, or other installation. In an aspect, the server computing device 140 and the mobile computing device 138 may be configured to exchange binaries (e.g., modified library binary files, etc.) via a local area network 180 associated with the router device 185. In another aspect, the mobile computing device 138 may transmit the wireless signals via the wireless data link 188 by utilizing an embedded WiFi transceiver/radio.
In an aspect, the router device 185 may provide a connection 187 to the Internet 24, thus enabling the devices 140, 138 to communicate with other devices over the Internet 24. For example, the server computing device 140 may utilize the wired data link 142 to exchange data with a remote data source, such as an applications server (not shown) that distributes mods, library files, or other binaries. In another aspect, the mobile computing device 138 may also be configured to utilize a long-range radio or wireless transceiver to exchange data with a cellular tower (not shown) via a long-range data link (not shown). For example, a smartphone mobile computing device 138 may be equipped with a cellular network modem and an antenna capable of receiving binaries and other data transmissions via a 3G, 4G or LTE cellular network.
In an aspect, the server computing device 140 and/or the mobile computing device 138 may be configured to execute a disassembler program (e.g., an interactive disassembler application, etc.) that may access, modify, and otherwise analyze binary code and/or machine code as assembly code. For example, the server computing device 140 may be configured to execute a disassembler program that identifies functional blocks of assembly language code and/or call flows based on an analysis of a binary file.
In block 302, the computing device may obtain a first library binary and a second library binary. For example, the first library binary may be an original binary developed by an OEM for installation on a smartphone, and the second library binary may be a modified binary developed by a third-party developer (or “modder”) to improve the original binary and increase the capabilities of the smartphone. The binaries may be obtained by various techniques, such as by downloading via a network connection (e.g., from a modder website via the Internet, etc.), retrieving from a local storage location/device (e.g., from a hard drive or optical disc), and/or by transmission from a nearby computing device (e.g., via Bluetooth signaling from a proximate mobile device).
In block 304, the computing device may identify a missing function within the second library binary exclusive to the first library binary. In various aspects, the missing function may include a method, a routine, a function, a program, an application programming interface (API) and/or an application. The identification may be accomplished by the computing device by executing routines, software, and other operations that may utilize the second library binary file in a manner or context similar to how the first binary library binary may be used. For example, the computing device may run the second library binary to collect error codes indicating the types of errors encountered or generated with the second library binary is executed. An aspect method for this identification process is described below with reference to
In block 306, the computing device may analyze the first library binary to identify a portion associated with the missing function. In other words, the computing device may identify the portion of the first library binary that includes the code, operations, data, and other information needed to perform the missing function. For example, the computing device may identify the contiguous section of machine code within the first library binary that corresponds to a position-independent function missing from the second library binary. An aspect method for performing this analysis is described below with reference to
In block 308, the computing device may generate a new binary by inserting the identified portion into the second library binary. The new binary may be substantially similar to the second library binary, adding only the portion of the first library binary associated with the missing function. The computing device may not perform any conversion operations or procedures on the identified portion of the first library binary, but instead may directly copy information of the identified portion from the first library binary into the second library binary. For example, the computing device may copy a portion of assembly source code or an object file from the first library binary file into the second library function. Further, the computing device may not utilize any predefined insertion points within the second library binary for determining where to insert the identified portion of the first library binary. Operations for generating new binaries are discussed below.
In block 310, the computing device may replace the binary of the first library with the new binary. For example, the computing device may overwrite the first library binary with the new binary. In an aspect, the computing device may replace, install, or otherwise utilize the new binary for its own operations (e.g., installed for use by the computing device's operating system) or alternatively the computing device may install or cause the new binary to be installed on another device. For example, the computing device may transmit the new binary along with installation/replacement instructions to a mobile computing device via wired/wireless communications.
In block 302, the computing device may obtain a first library binary and a second library binary. In block 304, the computing device may identify a missing function within the second library binary exclusive to the first library binary. In block 306, the computing device may analyze the first library binary to identify a portion associated with the missing function. In determination block 352, the computing device may determine whether the identified portion is position-independent. In other words, based on the analysis of the first library binary, the computing device may be configured to determine whether the identified portion is connected to, references, calls, points to, or otherwise is reliant upon any other portion, variable, code, or information of the first library binary. For example, the identified portion may not be position-independent when the computing device determines the portion includes a pointer to a variable managed within a separate block of code in the first library binary. In an aspect, the computing device may make this determination by evaluating information related to linker processes or software, or alternatively may perform mapping operations to identify any connectivity or dependencies within the first library binary.
If the portion is not position-independent (i.e., determination block 352=“No”), in block 354, the computing device may generate modifications to the identified portion to remove dependencies on the first library binary. In an aspect, the modifications may include creating a new variable and/or creating a new pointer to avoid reliance on functions, data, or other information included within other portions of the first library binary. For example, the computing device may be configured to generate new code added to the identified portion that represents variables, functions, pointers, and other operations represented within other portions of the first library binary. In an aspect, the computing device may utilize a translation table to generate modifications that remove dependencies.
If the portion is position-independent (i.e., determination block 352=“Yes”), or if the operations in block 354 have been executed, in block 308, the computing device may generate a new binary by inserting the identified portion into the second library binary. In block 310, the computing device may replace the binary of the first library with the new binary.
In block 302, the computing device may obtain a first library binary and a second library binary. In block 402, the computing device may access the second library binary with a loader/linker software. In other words, the computing device may implement or activate the second library binary in a normal operating environment by loading the second library binary into memory. For example, the computing device may use routines, instructions, or software to load, install, or otherwise activate the second library binary for use in operating system routines executing on the computing device's processor. In various aspects, the computing device may utilize a dynamic linker software, unit, component, or routines. In other aspects, the computing device may access the second library binary using an emulation application, such as an application that replicates the operating conditions of certain hardware or operating systems relevant to the first library binary.
In block 404, the computing device may identify a missing function based on errors generated by the loader/linker software. In particular, when the second library binary is loaded, the computing device may be configured to log errors and other diagnostics information that indicates whether any functions are required, malfunctioning, and/or missing. For example, at load-time (or alternatively run-time), the computing device may encounter errors with unresolved symbols, variables, functions, or other information within the second library binary and may perform operations to record these errors as codes or other descriptions within a log file.
In block 306, the computing device may analyze the first library binary to identify a portion associated with the missing function. For example, the computing device may identify the portion of the first library binary that corresponds to the missing function indicated in a loader error log file stored within memory. In block 308, the computing device may generate a new binary by inserting the identified portion into the second library binary. In block 310, the computing device may replace the binary of the first library with the new binary.
In block 302, the computing device may obtain a first library binary and a second library binary. In block 304, the computing device may identify a missing function within the second library binary exclusive to the first library. In block 502, the computing device may obtain a first library source code associated with the first library binary. For example, the computing device may execute a disassembler application to generate source code, such as ARM assembly code, based on the first binary file. However, the computing device may or may not necessarily utilize a decompiler or decompiling process to obtain the first library source code. In block 504, the computing device may analyze the first library source code to identify a portion associated with the missing function. For example, the computing device may execute source analyzer applications, routines, or operations to compare the missing function with the various functions included within the source code representing the first library binary. In an aspect, the computing device may utilize an embedded application binary interface to perform the analysis.
In various aspects, the computing device may perform operations to test the accuracy of identified portions and ensure the completeness of functions included therein. For example, once the portion of the first library binary is identified, such as via a source code analyzer routine, the computing device may simulate the functionality of the portion with test data and detect whether errors are encountered, thus indicating whether the identified portion truly represents the missing function. In various aspects, such operations to test the identified portion may be similar to the operations described above with reference to determination block 352 in
In block 506, the computing device may obtain the source code for the second library binary. In many cases, the computing device may be associated with the party that creates the second library binary. For example, the computing device may be a computer used by a developer of the second library binary. In such a case, the computing device may simply obtain the second library binary source code from a local storage location. In another aspect, the computing device may or may not perform operations similar to those described above with reference to block 502, such as obtaining source code based on decompiling the second library binary. In block 508, the computing device may insert the identified portion associated with the missing function into the second library source code. For example, the computing device may be configured to copy assembly code associated with the identified portion into the assembly code of the second library binary. The insertion may not be predefined by within the second library source code, such as a place for patching modified or new content (e.g., functions) defined by a developer. In block 510, the computing device may compile the second library source code with the inserted portion to generate a new binary, such as a new binary that includes the functions of the second library and the missing function from the first library. In block 310, the computing device may replace the binary of the first library with the new binary.
In block 302, the computing device may obtain a first library binary and a second library binary. In block 602, the computing device may implement the second library binary in place of the first library binary. In other words, when the first library binary is the default or typically loaded library, the second library binary may be loaded instead. In such a case, the first library binary may be accessible to the computing device, such as stored within volatile memory, but may not be linked to for the purposes of executing applications or routines. In block 604, the computing device may dynamically identify a function missing from the second library binary that is exclusive to the first library binary. Thus, as an application is executing on the processor of the computing device, the computing device may detect and report errors or other failures to perform the application due to unlinked (or non-existent) functions, routines, variables, data, and/or other information. In an aspect, the computing device may perform routines to catch or otherwise handle errors, interrupts, or other actions resulting from the missing function. For example, the computing device may employ an interrupt handler routine that listens for interrupts generated by a loader/linker and that freezes applications that are requesting missing functions not within the second library binary. In this way, the computing device may avoid failures or calamitous results in the event a missing function is invoked by applications or routines executing on the computing device.
In block 306, the computing device may analyze the first library binary to identify a portion associated with the missing function, as described above. In block 606, the computing device may dynamically insert the identified portion associated with the missing function into the second library binary, such as into a volatile memory address associated with the second library binary. The computing device may continue with the operations in block 604. In an aspect, the computing device may utilize a dynamic linker.
In block 302, the computing device may obtain a first library binary and a second library binary. In block 304, the computing device may identify a missing function within the second library binary exclusive to the first library binary. In block 306, the computing device may analyze the first library binary to identity a portion associated with the missing function. In block 702, the computing device may install both the first and the second library binaries, such as by loading both the binaries into memory for use with applications or routines executing on the computing device's processor. In block 704, the computing device may configure a specialized loader/linker to use the second library binary and the identified portion of the first library binary corresponding to the missing function. In other words, the specialized linker may be adjusted by the computing device to include pointers, routines, and/or instructions that may cause the computing device to utilize the information of the second library binary except when there are references to the missing function, in which case the loader/linker may direct the computing device to utilize the identified portion of the first library binary.
The various aspects may be implemented on any of a variety of commercially available server devices, such as the server computing device 140 illustrated in
The processors 801 and 901 may be any programmable microprocessor, microcomputer or multiple processor chip or chips that can be configured by software instructions (applications) to perform a variety of functions, including the functions of the various aspects described above. In the various devices, multiple processors may be provided, such as one processor dedicated to wireless communication functions and one processor dedicated to running other applications. Typically, software applications may be stored in the internal memory 802 and 902 before they are accessed and loaded into the processors 801 and 901. The processors 801 and 901 may include internal memory sufficient to store the application software instructions. In many devices the internal memory may be a volatile or nonvolatile memory, such as flash memory, or a mixture of both. For the purposes of this description, a general reference to memory refers to memory accessible by the processors 801 and 901 including internal memory or removable memory plugged into the various devices and memory within the processors 801 and 901.
The foregoing method descriptions and the process flow diagrams are provided merely as illustrative examples and are not intended to require or imply that the steps of the various aspects must be performed in the order presented. As will be appreciated by one of skill in the art the order of steps in the foregoing aspects may be performed in any order. Words such as “thereafter,” “then,” “next,” etc. are not intended to limit the order of the steps; these words are simply used to guide the reader through the description of the methods. Further, any reference to claim elements in the singular, for example, using the articles “a,” “an” or “the” is not to be construed as limiting the element to the singular.
The various illustrative logical blocks, modules, circuits, and algorithm steps described in connection with the aspects disclosed herein may be implemented as electronic hardware, computer software, or combinations of both. To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, modules, circuits, and steps have been described above generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present invention.
The hardware used to implement the various illustrative logics, logical blocks, modules, and circuits described in connection with the aspects disclosed herein may be implemented or performed with a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but, in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration. Alternatively, some steps or methods may be performed by circuitry that is specific to a given function.
In one or more exemplary aspects, the functions described may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functions may be stored on or transmitted over as one or more instructions or code on a computer-readable medium. The steps of a method or algorithm disclosed herein may be embodied in a processor-executable software module that may reside on a tangible, non-transitory computer-readable storage medium. Tangible, non-transitory computer-readable storage media may be any available media that may be accessed by a computer. By way of example, and not limitation, such non-transitory computer-readable media may comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium that may be used to store desired program code in the form of instructions or data structures and that may be accessed by a computer. Disk and disc, as used herein, includes compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk, and blu-ray disc where disks usually reproduce data magnetically, while discs reproduce data optically with lasers. Combinations of the above should also be included within the scope of non-transitory computer-readable media. Additionally, the operations of a method or algorithm may reside as one or any combination or set of codes and/or instructions on a tangible, non-transitory machine readable medium and/or computer-readable medium that may be incorporated into a computer program product.
The preceding description of the disclosed aspects is provided to enable any person skilled in the art to make or use the present invention. Various modifications to these aspects will be readily apparent to those skilled in the art, and the generic principles defined herein may be applied to other aspects without departing from the spirit or scope of the invention. Thus, the present invention is not intended to be limited to the aspects shown herein but is to be accorded the widest scope consistent with the following claims and the principles and novel features disclosed herein.