-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' –