2012-04-11 25 views
1

バッファオーバーフローの影響を受けやすいプログラムを悪用しようとしている宿題に取り組んでいます。これを行うには、大きいcharアレイを作成し、最初に操作の指示なしで完全に入力します。複数文字の定数警告を修正するには

悪意のあるコードをバッファのどこかにコピーして(この部分はうまくいく)、悪意のあるコードが何らかの形で悪意のあるコードです。

私は設定したいアドレスを知っていますが(½¾¿ºとしましょう)、いくつかの警告が表示されていて、その原因がわかりません。

これは、警告の原因となっていること(実質的に)コードである:私のbdbebfba(アドレスを変換してアドレスを持っ

warning: overflow in implicit constant conversion 
warning: multi-character character constant 

int start_of_return_address = 10; 
chars[start_of_return_address + 0] = '½'; 
chars[start_of_return_address + 1] = '¾'; 
chars[start_of_return_address + 2] = '¿'; 
chars[start_of_return_address + 3] = 'º'; 

をIは、各割り当てのために取得した警告であります悪意のあるコード)を文字に変換します(½¾¿ºとなります)。

何が原因で警告が表示されるか、または別の方法で文字配列にアドレスをコピーできますか?

これは宿題のためのものです。

+0

どのように 'bdbebfba'を '文字'に変換しましたか? – ArjunShankar

答えて

4

bdbebfbaから文字への変換は疑わしいと思います。

それがアドレスであれば、私は私がどうなる文字配列に格納したい場合:

chars[start_of_return_address + 0] = 0xbd; 
chars[start_of_return_address + 1] = 0xbe; 
chars[start_of_return_address + 2] = 0xbf; 
chars[start_of_return_address + 3] = 0xba; 

これは、4バイトの値ですので、 4つの文字に適合します。

私はendian-nessだと思います。システムがリトルエンディアン(x86)の場合、最下位バイトは下位アドレスに入ります(そして割り当ての順序は逆になります)。あなたは私たち('½''¾''¿''º')を示している

chars[start_of_return_address + 4] = 0xbd; 
chars[start_of_return_address + 3] = 0xbe; 
chars[start_of_return_address + 2] = 0xbf; 
chars[start_of_return_address + 1] = 0xba; 
+0

これはそれでした!ありがとうございました!このエンディアンは、実際には重要な要素(コードの第2セット)だったので、編集してくれてありがとう。 – Fred

1

文字リテラルは、複数文字定数として解釈されるべきではありません。彼らは私の推測では、それはエンコーディングの問題であると考えています。例えば、ソースではUTF-8(したがって2バイト)としてエンコードできますが、コンパイラは別のエンコーディングを期待しています(Latin- - もし私が正しいなら、彼らは'½''¾''¿''º'と見なされ、定数に2文字あると考えます。

関連する問題