1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| int __cdecl power_up(char *dest) { char s; // [esp+0h] [ebp-34h] size_t new_len; // [esp+30h] [ebp-4h]
new_len = 0; memset(&s, 0, 0x30u); if ( !*dest ) return puts("You need create the bullet first !"); if ( *((_DWORD *)dest + 12) > 47u ) // len>47 return puts("You can't power up any more !"); printf("Give me your another description of bullet :"); read_input(&s, 48 - *((_DWORD *)dest + 12)); strncat(dest, &s, 48 - *((_DWORD *)dest + 12));// strncat会在dest结尾添加\0结束符,而记录字符串长度的位置正好位于s+0x30的位置, // s+0x30在strncat添加字符串长度为0x30时会被覆盖为0 new_len = strlen(&s) + *((_DWORD *)dest + 12);// s+0x30被覆盖为0后new_len变为附加字符串的长度 printf("Your new power is : %u\n", new_len); *((_DWORD *)dest + 12) = new_len; return puts("Enjoy it !"); }
|