![]() ![]() At some point, ARM introduced an enhanced Thumb instruction set (pseudo name: Thumbv2) which allows 32-bit Thumb instructions and even conditional execution, which was not possible in the versions prior to that. The calling conventions of ARM versions is more than confusing and not all ARM versions support the same Thumb instruction sets. ![]() When writing ARM shellcode, we need to get rid of NULL bytes and using 16-bit Thumb instructions instead of 32-bit ARM instructions reduces the chance of having them. Knowing when and how to use Thumb is especially important for our ARM exploit development purposes. The main difference between these two states is the instruction set, where instructions in ARM state are always 32-bit, and instructions in Thumb state are 16-bit (but can be 32-bit). For example, code running in SVC mode can be either ARM or Thumb. These states have nothing to do with privilege levels. ARM processors have two main states they can operate in (let’s not count Jazelle here), ARM and Thumb. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |