

In other circumstances, r14 can be (and is!) used as a general-purpose register. Instead, it stashes the return address in r14. The ARM call instruction ( branch-with-link) doesn’t use the stack directly. Of these, two have special roles baked in to the hardware:



#CHROME 32BIT DOWNLOAD CODE#
Nearly every instruction can be conditionally executed based on the contents of a dedicated condition code register.ĪRM processors have 16 general-purpose registers used for integer and memory operations, written r0 through r15. This dramatically simplifies some of our analyses, as we’ll see later. Thumb, Thumb2 (now confusingly called T32), Jazelle, ThumbEE and such aren’t supported by Native Client. While modern ARM chips support several instruction encodings, 32-bit Native Client on ARM focuses on a single one: a fixed-width encoding where every instruction is 32-bits wide called A32 (previously, and confusingly, called simply ARM). This document only discussed the 32-bit A32 instruction set: A64 would require a different sandboxing model. For Native Client’s purposes the A32 ISA is equivalent to the ARMv7 ARM ISA, albeit with a few new instructions. Our security relies on the presence of this feature.ĪRMv8 adds a new 64-bit instruction set architecture called A64, while also enhancing the 32-bit A32 ISA. This pagetable attribute lets us mark memory as non-executable. Critically, ARMv7-A specifies the “eXecute Never” bit, or XN. This revision, defined in the mid-2000s, adds a number of useful instructions, and specifies some portions of the system that used to be left to individual chip manufacturers. Native Client specifically targets the ARMv7-A architecture commonly used in high-end phones and smartbooks. Through the years, there have been many revisions of the ARM architecture, written as ARMv X for some version X. However, its most visible use is in cellular phones, tablets and some laptops. Today, it is used primarily in embedded systems: everything from toys, to home automation, to automobiles. About ARM and ARMv7-AĪRM is one of the older commercial “RISC” processor designs, dating back to the early 1980s. In this section, we summarize the relevant parts of the ARM processor architecture. The Stack Pointer, Thread Pointer, and Program Counter.We assume no prior knowledge about the internals of Native Client, on x86 or any other architecture, but we do assume some familiarity with assembly languages in general. On this page, we describe how Native Client works on 32-bit ARM.
#CHROME 32BIT DOWNLOAD PORTABLE#
Note that the Portable Native Client compiler itself is also untrusted: it too runs in the ARM sandbox described in this document. This may change at a point in time: Portable Native Client doesn’t necessarily need this sandbox to execute code on ARM.
#CHROME 32BIT DOWNLOAD .EXE#
The portable bitcode contained in a pexe is translated to a 32-bit ARM nexe before execution. Security is provided with a low performance overhead of about 10% over regular ARM code, and as you’ll see in this document the sandbox model is beautifully simple, meaning that the trusted codebase is much easier to validate.Īs an implementation detail, the Native Client 32-bit ARM sandbox is currently used by Portable Native Client to execute code on 32-bit ARM machines in a safe manner. The ARM sandbox is an extension of earlier work on Native Client for x86 processors. Native Client for ARM is a sandboxing technology for running programs-even malicious ones-safely, on computers that use 32-bit ARM processors. Please visit our migration guide for details. Deprecation of the technologies described here has been announced for platforms other than ChromeOS.
