1

私のソフトウェアは Web クローラーですが、http 応答から本体を取得すると、クラックします。

resp->body = Malloc(content_len);
memcpy(resp->body, body_start, content_len); //THIS IS THE FAULTY LINE

malloc は malloc のラッパー関数なので、resp->body は NULL ではなく、content_len は body_start から始まるメモリ領域の長さですが、その内容は「PK\003\004\024」、「\003」は ETX( end of text)、「\004」は EOT(送信終了)、「\024」はデバイス制御 4、これらの奇妙な文字の意味が本当にわかりません。なぜクラックするのですか?

4

1 に答える 1

2

本文は、 ZIP ウィキペディアのページから ZIP エンコードされています。

マジック ナンバー
はありませんが、PK\003\004、 PK\005\006 (空のアーカイブ)、または PK\007\008 (スパン アーカイブ) が一般的です。

読む前に、ヘッダーを確認し、本文を解凍する必要があります。

セグメンテーション違反に関しては、memcpy への 3 つのパラメーターのいずれかが原因である可能性があります。正確な問題を特定するには、それらの初期化を示すコードが必要です。コードの表示されていない部分で本体に文字列関数 (strlen/strcpy) を使用している場合、このようなバイナリ入力で壊れる可能性があります。

于 2013-05-01T06:15:22.900 に答える