如下代码计算地址并16字节对齐:
char* buffer = (char*)malloc(a3 + 0x1000);
unsigned long long tmp = (((unsigned long long)buffer + 0x10) & 0xffffffffffffff00);
char* buf = (char*)tmp;
假如把地址当作整数,加减程序运算,直接转换是不行的,gcc会提示各种错误:
error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
恼人的地方在于,无论你怎么改,除非将buffer 类型改为uintptr_t,或者unsigned long,其他类型都无效!
唯一可行、有效的方法如下:
char* buffer = (char*)malloc(a3 + 0x1000);
uintptr_t tmp = ((( uintptr_t )buffer + 0x10) & 0xffffffffffffff00);
char* buf = (char*)tmp;