Figure 2-13 illustrates a common routine, but you may not have seen it implemented this way.
Here is the disassembly of the function:
Figure 2-13. Practical Reverse Engineering. © 2014 by Bruce Dang |
The ARM processor is in Thumb state. We immediately recognize this is a strlen() routine. There is a bit field clear at the end, whose purpose is unclear. Here is how the function is implemented:
size_t strlen(const char *str) { /* CBNZ R0, loc_100E1D8 */ if (r0 == NULL) return 0; /* MOVS R0, #0 */ /* MOV R2, R0 */ char *index = str; while (1) /* loc_100E1E4 */ { /* CMB R3, #0 */ if (*index == '\0') break; ++index; /* ADDS R2, #1 */ } /* SUBS R0, R2, R0 */ return (index - str); }
No comments :
Post a Comment