如何为小端编码奇长字节地址?

时间:2017-05-12 20:41:24

标签: c function-pointers endianness buffer-overflow

我有一个缓冲区和函数指针,它会溢出一个地址,

static char buffer[12];
static int (*target_function)(char * str);

溢出本身不是问题,但我似乎无法输入正确的地址0x8048338

正如问题中所述,我现在面临的问题是,如何将此地址编码为小端,或者该问题的任何字节顺序?

1 个答案:

答案 0 :(得分:3)

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;

来自var:

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;
}