HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1119
ニボッシー皆さんのバッファオーバーフロー対策7解決


ニボッシー

リンク

2014/11/19(Wed) 01:34:29|NO.66091

お世話になっております。3つほど質問させてください。

皆さんはバッファオーバーフロー対策はどうやっていますか?
自分は変数がどれくらいのバッファが必要か分からない場合
sdimを使わずnoteselを使って確保しています。

notesel List : dirlist List,"*.*",0

おかげで自分のソースはnotesel乱用している状態になっています。
本来はsdimを使ってあらかじめ多めにバッファを確保したほうがいいのでしょうけど
noteselの使い方をこのような用途で使ってもいいのでしょうか?

1、noteselを乱用することによってなにかまずいことはあるでしょうか?

2、sdimやnotesel等でバッファを余分に確保していない変数を使って
バッファオーバーフローを起こした場合、バッファオーバーフローを起こしている変数を
簡単に調べる方法は何かないでしょうか?
Debugウィンドウを表示をしても変数がいっぱいあるため特定が非常に困難になってきました。

3、皆さんのバッファオーバーフロー対策をお聞かせ下さい。



この記事に返信する


skyblue

リンク

2014/11/19(Wed) 07:12:24|NO.66092

標準の命令などで使っている限りsdimで取得したバッファーは自動拡張があります。
そもそもあふれないように気をつけるべきなのではないでしょうか?



KOMARI

リンク

2014/11/19(Wed) 09:49:33|NO.66094

変数の自動拡張とはなんだったのか……(・ω・)
ということで回答を。


 note系関数(の多用)は重い。

 バッファオーバーフローが起きるのはmemcpy等多用されているのでしょうか。
 代入(命令によるものも含む)程度では起きなかったような。
 もしも起きてしまっても、たとえばmemcpyの行で怒られるから判別は簡単なような・・・。

 HSPは自動拡張のおかげもあって、メモリの管理をある程度適当にできるのであんまりきにしてません。
 ただしbloadやmemcpyやdupptr等を使う場合は確保量は気をつけています。



cats

リンク

2014/11/19(Wed) 16:30:49|NO.66104

1.処理速度を気にしないのであればまずいことは無いと思います。
2.外部ライブラリからデータを入れない限りHSPではエラーになりませんでしたか?
  私の場合pcbnetでも使わない限りバッファオーバーフロー脆弱性が生まれることはないので
  あまり気にしていません。
  確保したサイズの最後のオフセットから1バイトをpeekで監視すればオーバーフローが分かると思います。
3.基本的にはできるだけ十分なサイズを確保するようにしています。
  危ない部分は、工夫してオーバーフローを防げるような外部ライブラリやモジュール等を使います。
  ファイルの読み込みはexistで調べてからbloadで必要な分を読み込みます。



あきまさ

リンク

2014/11/19(Wed) 18:07:54|NO.66110

私はbloadやmemcpyを使うが、使用メモリ量はその時にならないとわからない時はmemexpand命令でメモリ再確保を行ってます。
中身のデータを変更せずに確保サイズを増やせるので便利ですよ。



ニボッシー

リンク

2014/11/19(Wed) 21:11:07|NO.66113

>skyblueさん
sdimって自動拡張できたんですね。
数値を指定するのでその数値までしか確保できないものと思っていました。
これからはsdimも使ってみようかと思います。
確かに意識してあふれないように作るべきですね。気をつけます。

>KOMARIさん
1,noteselって重い命令だったのですね、勉強になりました。
2,自分で組んだソースではmemcopyは使ったことがありませんが
たくさんのモジュールを使っていますのでそのモジュールの中に使っているのはあります。
ただエラーが出た時バッファを確保している変数の所でバッファオーバーフローが起きることがあるんですよね
3,bloadやmemcpyやdupptrはbloadしか使ったことありませんが
今後使う機会があれば3つとも気をつけるようにします。

>catsさん
1,皆さんも言われているようにnoteselって重いんですねー知りませんでした。
2,外部ライブラリは全然想定外でした。どれも必須な外部ライブラリなので外して使うことが出来ませんが
そちらのエラーの可能性もあるってことですね。
peekで1byte監視の発想ためになりました思いつきもしませんでした。
3,こちらは実践していましたが、バッファを確保していない変数もいっぱいあるため
管理がしきれなくなってしまっている状態でやや後悔中です。。

>あきまささん
memexpandという命令もあるのですね。とても便利そうですので今度使ってみます。

皆様貴重な意見ありがとうございました!



葡萄色

リンク

2014/11/20(Thu) 00:35:14|NO.66116

解決しているようですが、少し勘違いされているようですので補足させて頂きます。

>sdimって自動拡張できたんですね。
>数値を指定するのでその数値までしか確保できないものと思っていました。
>これからはsdimも使ってみようかと思います。
と仰っていますが、明示的に変数をsdimで宣言しなかった場合でも、
HSPの場合は変数に文字列を代入した時点で
sdim命令の第二引数を省略した場合と同じ64文字分が確保され、
オーバーフローした場合も再確保が行われます。

なお、sdim命令の第二引数は64以下の値を指定した場合、
強制的に64文字分メモリを確保するようです。



ニボッシー

リンク

2014/11/22(Sat) 11:57:47|NO.66131

>葡萄色さん
補足ありがとうございます。
sdimを使わず宣言した変数が文字列の場合はオーバーフローしないのは初耳でした。
基本的にはオーバーフロー対策は数値の変数を気をつければよさそうですね。



ONION software Copyright 1997-2023(c) All rights reserved.