2017-05-12 1 views
-1

私はアドレスでオーバーフローしれようとしているバッファと機能のポインタを持って、 何リトルエンディアンの場合、奇数バイトのアドレスをエンコードする方法は?

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

オーバーフロー自体は問題ではありませんが、私は0x8048338

ある右のアドレスに入れているように見えるカント

質問に記載されているように、私が今直面している問題は、このアドレスをどのようにリトルエンディアンにエンコードするのか、それともエンディアンにエンコードするのでしょうか?

+0

のErm ...何?オーバーフローはどこですか?どちらの住所について話していますか?それはエンディアンと何が関係がありますか? –

+0

アドレス '0x8048338'に関数があり、それに関数ポインタを設定したいのですか? 'static int(* target_function)(char * str)=(int(*)(char * str))0x8048338;'はエンディアンとは独立しています。 – mch

+2

'0x8048338' ==' 0x08048338' –

答えて

2

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; 
} 
関連する問題