Claims
- 1. A method for editing a binary code, comprising:
preparing a binary patch, the binary patch containing supplemental instructions to be included in the binary code; identifying an instruction in the binary code; and replacing the instruction in the binary code with a branch, the branch directing a control of the binary code to the binary patch.
- 2. A method for editing a binary code as recited in claim 1, wherein a first instruction in the binary patch is the instruction in the binary code replaced with the branch.
- 3. A method for editing a binary code as recited in claim 1, wherein a last instruction in the binary patch directs the control of the binary code to a subsequent instruction in the binary code, the subsequent instruction immediately following the instruction in the binary code replaced with the branch.
- 4. A method for editing a binary code as recited in claim 1, wherein replacing the instruction in the binary code with the branch is performed without recompiling an original source code, the original source code having been used to create the binary code.
- 5. A method for editing a binary code as recited in claim 1, wherein the binary code is represented using a machine language, the machine language being a native language for a computer architecture.
- 6. A method for editing a binary code as recited in claim 5, further comprising:
disassembling the machine language to represent the binary code in an assembly language, the disassembling occurring prior to identifying the instruction in the binary code and replacing the instruction in the binary code with the branch, the instruction identification and replacement being performed on the assembly language representation of the binary code, the assembly language having a direct correspondence with the machine language.
- 7. A method for editing a binary code as recited in claim 6, further comprising:
reassembling the assembly language representation of the binary code to represent the binary code in the machine language, the reassembling occurring after the instruction identification and replacement having been performed on the assembly language representation of the binary code.
- 8. A method for editing a binary code as recited in claim 1, wherein replacing the instruction in the binary code with the branch is performed such that a machine state is preserved, the machine state comprising a plurality of register values and data existing immediately prior to an execution of the branch.
- 9. A method for editing a binary code as recited in claim 1, wherein the binary code comprises a plurality of binary instructions, the plurality of binary instructions being executable by computer system circuitry.
- 10. A method for inserting a binary patch into a binary code, comprising:
identifying a first instruction in the binary code to be replaced by a branch to the binary patch, the branch directing a program control to an initial instruction in the binary patch; preparing the binary patch, the binary patch containing supplemental instructions to be included in the binary code, the initial instruction in the binary patch being the first instruction in the binary code to be replaced by the branch, a final instruction in the binary patch directing the program control to a second instruction in the binary code, the second instruction immediately following the first instruction in the binary code that is to be replaced by the branch; and replacing the first instruction in the binary code with the branch.
- 11. A method for inserting a binary patch into a binary code as recited in claim 10, wherein replacing the first instruction in the binary code with the branch is performed without recompiling an original source code, the original source code having been used to create the binary code.
- 12. A method for inserting a binary patch into a binary code as recited in claim 10, wherein the binary code is represented using a machine language, the machine language being a native language for a computer architecture.
- 13. A method for inserting a binary patch into a binary code as recited in claim 12, further comprising:
disassembling the machine language to represent the binary code in an assembly language, the disassembling occurring prior to identifying the first instruction in the binary code and replacing the first instruction in the binary code with the branch, the first instruction identification and replacement being performed on the assembly language representation of the binary code, the assembly language having a direct correspondence with the machine language.
- 14. A method for inserting a binary patch into a binary code as recited in claim 13, further comprising:
reassembling the assembly language representation of the binary code to represent the binary code in the machine language, the reassembling occurring after the first instruction identification and replacement having been performed on the assembly language representation of the binary code.
- 15. A method for inserting a binary patch into a binary code as recited in claim 10, wherein replacing the first instruction in the binary code with the branch is performed such that a machine state is preserved, the machine state comprising a plurality of register values and data existing immediately prior to an execution of the branch.
- 16. A method for inserting a binary patch into a binary code as recited in claim 10, wherein the binary code comprises a plurality of binary instructions, the plurality of binary instructions being executable by computer system circuitry.
- 17. A method for inserting a plurality of binary patches into a binary code, comprising:
identifying a plurality of instructions in the binary code to be replaced by a plurality of branches, the plurality of instructions occurring sequentially in the binary code, the plurality of branches corresponding to the plurality of binary patches, a first instruction of the plurality of instructions directing a program control to an initial instruction in a first binary patch of the plurality of binary patches; preparing the plurality of binary patches, wherein the plurality of binary patches contain supplemental instructions to be included in the binary code, the initial instruction in the first binary patch of the plurality of binary patches being the first instruction of the plurality of instructions in the binary code to be replaced by the plurality of branches, a final instruction in each of the plurality of binary patches directing the program control to an initial instruction in a subsequent binary patch of the plurality of binary patches, the initial instruction in a subsequent binary patch of the plurality of binary patches being a subsequent instruction of the plurality of instructions in the binary code to be replaced by the plurality of branches, a final instruction in a last binary patch of the plurality of binary patches directing the program control to an instruction in the binary code immediately following the plurality of instructions in the binary code to be replaced by the plurality of branches; and replacing each of the plurality of instructions in the binary code with one of the plurality of branches.
- 18. A method for inserting a plurality of binary patches into a binary code as recited in claim 17, wherein replacing each of the plurality of instructions in the binary code with one of the plurality of branches is performed without recompiling an original source code, the original source code having been used to create the binary code.
- 19. A method for inserting a plurality of binary patches into a binary code as recited in claim 17, wherein replacing each of the plurality of instructions in the binary code with one of the plurality of branches is performed such that a machine state is preserved, the machine state comprising a plurality of register values and data existing immediately prior to an execution of each of the plurality of branches.
- 20. A method for inserting a plurality of binary patches into a binary code as recited in claim 17, wherein the binary code comprises a plurality of binary instructions, the plurality of binary instructions being executable by computer system circuitry.
- 21. A method for inserting two binary patches into a binary code, comprising:
identifying a first instruction in the binary code to be replaced by a first branch, the first branch corresponding to a first binary patch, the first branch directing a program control to an initial instruction in the first binary patch; identifying a second instruction in the binary code to be replaced by a second branch, the second instruction immediately following the first instruction in the binary code, the second branch corresponding to a second binary patch; preparing the first binary patch, wherein the first binary patch contains supplemental instructions to be included in the binary code, the initial instruction in the first binary patch being the first instruction in the binary code to be replaced by the first branch, a final instruction in the first binary patch directing the program control to an initial instruction in the second binary patch; preparing the second binary patch, wherein the second binary patch contains supplemental instructions to be included in the binary code, the initial instruction in the second binary patch being the second instruction in the binary code to be replaced by the second branch, a final instruction in the second binary patch directing the program control to an instruction in the binary code immediately following the second instruction in the binary code to be replaced by the second branch; replacing the first instruction in the binary code with the first branch; and replacing the second instruction in the binary code with the second branch.
- 22. A method for inserting two binary patches into a binary code as recited in claim 21, wherein replacing the first instruction in the binary code with the first branch and replacing the second instruction in the binary code with the second branch is performed without recompiling an original source code, the original source code having been used to create the binary code.
- 23. A method for inserting two binary patches into a binary code as recited in claim 21, wherein replacing the first instruction in the binary code with the first branch and replacing the second instruction in the binary code with the second branch is performed such that a machine state is preserved, the machine state comprising a plurality of register values and data existing immediately prior to an execution of the first branch and the second branch, wherein the machine state immediately prior to the execution of the first branch may be different than the machine state immediately prior to the execution of the second branch.
- 24. A method for inserting two binary patches into a binary code as recited in claim 21, wherein the binary code comprises a plurality of binary instructions, the plurality of binary instructions being executable by computer system circuitry.
CROSS REFERENCE TO RELATED APPLICATIONS
[0001] This application is related to U.S. patent application Ser. No. ______ (Attorney Docket No. SUNMP137), filed Dec. 9, 2002, and entitled “Method for Safely Instrumenting Large Binary Code,” which is incorporated herein by reference.