-1
我有打算与地址将被溢出的缓冲区和函数指针,有什么如何编码小端的奇数长度字节地址?
static char buffer[12];
static int (*target_function)(char * str);
溢出本身是没有问题的,但我似乎无法投入是0x8048338
正如问题中所述,我现在面临的问题是,如何将此地址编码为小端或任何字节序?
我有打算与地址将被溢出的缓冲区和函数指针,有什么如何编码小端的奇数长度字节地址?
static char buffer[12];
static int (*target_function)(char * str);
溢出本身是没有问题的,但我似乎无法投入是0x8048338
正如问题中所述,我现在面临的问题是,如何将此地址编码为小端或任何字节序?
0x8048338
作为BE字节顺序中的32位整数是08 04 83 38
。作为LE字节顺序的32位整数是。
硬编码:
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;
}
呃......什么?溢出在哪里?你在说什么地址?它与endiannes有什么关系? –
你在地址0x8048338有一个函数,并且想要设置函数指针吗? static int(* target_function)(char * str)=(int(*)(char * str))0x8048338;'应该这样做,独立于endianess。 – mch
'0x8048338' =='0x08048338' –