2017-05-12 28 views
-1

我有打算與地址將被溢出的緩衝區和函數指針,有什麼如何編碼小端的奇數長度字節地址?

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

溢出本身是沒有問題的,但我似乎無法投入是0x8048338

正確的地址

正如問題中所述,我現在面臨的問題是,如何將此地址編碼爲小端或任何字節序?

+0

呃......什麼?溢出在哪裏?你在說什麼地址?它與endiannes有什麼關係? –

+0

你在地址0x8048338有一個函數,並且想要設置函數指針嗎? static int(* target_function)(char * str)=(int(*)(char * str))0x8048338;'應該這樣做,獨立於endianess。 – mch

+2

'0x8048338' =='0x08048338' –

回答

2

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; 
} 
相關問題