なぜこれが起こるのか誰にも分かりますか?
私は AIX 5.3 に C プログラムを持っています。それを SPARC Solaris 10 マシンで実行するように依頼されましたが、実際に実行したところ、多くの無謀な strcat の使用の 1 つでバッファ オーバーフローが発生していることに気付きました。私の目標は、コードをサニタイズすることではなく、AIX ではなく、Solaris でこのオーバーフローが発生する理由について、具体的かつ十分に根拠のある答えを提供することです。
これが次の原因で発生する可能性があるかどうかについて少し読んでいます。
AIX と Solaris ではエンディアンが異なります。strcat 関数の実行 (AIX は右から左に、Solaris は左から右にコピーします) が、これに関するドキュメントを見つけることができませんでした。
- この問題が AIX で発生しないという単純な幸運です。
あなたがこれに当てることができるどんな光も高く評価されます.
編集:これは、solaris の noexec_user_stack フラグで回避できますか?
編集 2: 両方の OS が実際のバイト コピーを行う方法について誰か情報を持っていますか? 上記のオプション 2 のような状況では?
編集 3: コードのチャンクは次のとおりです。
/*global*/
char bufferA[101];
/*inside function*/
bufferA[0]='\0';
strcpy(bufferA,"1");
if (atoi(something)==0) {
strcat(bufferA,pieces_of_data);
count ++ ;
}
明らかにそれ以上のものがありますが、これはbufferAが使用されている唯一の部分であり、bufferAに追加された最後の文字列の最後の部分で破損するbufferAの後に2つの変数がグローバルに宣言されています.
前に言ったように、宣言を 101 から 201 に変更すると、破損は発生しません。
編集 4: solaris の -misalign および -misalign2 コンパイラ オプションについて何か知っている人はいますか? これらのオプションに光が当たる可能性はありますか? 実際には、AIX powerPC と Solaris SPARC のアライメントに関して違いはありますか? これはおそらくserverfaultの質問ですが、何か知っている場合は共有してください.