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