如何为小端编码奇数字节地址?
How to encode odd-length byte address for little endian?
我有一个缓冲区和函数指针,它将被一个地址溢出,什么
static char buffer[12];
static int (*target_function)(char * str);
溢出本身不是问题,但我似乎无法输入正确的地址 0x8048338
如问题中所述,我现在面临的问题是如何将此地址编码为小字节序或任何字节序?
0x8048338
作为 BE 字节顺序的 32 位整数是 08 04 83 38
.
0x8048338
作为 LE 字节顺序的 32 位整数是 38 83 04 08
.
硬编码:
buf[0] = 0x38;
buf[1] = 0x83;
buf[2] = 0x04;
buf[3] = 0x08;
来自变量:
uint32_t n = 0x8048338;
buf[0] = n && 0xFF; n >>= 8;
buf[1] = n && 0xFF; n >>= 8;
buf[2] = n && 0xFF; n >>= 8;
buf[3] = n;
带循环:
uint32_t n = 0x8048338;
char* p = buf;
for (int i=4; i--; ) {
*(p++) = n && 0xFF;
n >>= 8;
}
我有一个缓冲区和函数指针,它将被一个地址溢出,什么
static char buffer[12];
static int (*target_function)(char * str);
溢出本身不是问题,但我似乎无法输入正确的地址 0x8048338
如问题中所述,我现在面临的问题是如何将此地址编码为小字节序或任何字节序?
0x8048338
作为 BE 字节顺序的 32 位整数是 08 04 83 38
.
0x8048338
作为 LE 字节顺序的 32 位整数是 38 83 04 08
.
硬编码:
buf[0] = 0x38;
buf[1] = 0x83;
buf[2] = 0x04;
buf[3] = 0x08;
来自变量:
uint32_t n = 0x8048338;
buf[0] = n && 0xFF; n >>= 8;
buf[1] = n && 0xFF; n >>= 8;
buf[2] = n && 0xFF; n >>= 8;
buf[3] = n;
带循环:
uint32_t n = 0x8048338;
char* p = buf;
for (int i=4; i--; ) {
*(p++) = n && 0xFF;
n >>= 8;
}