3

私は巨大なコードでこのC関数を持っています:

void test() {
    char *arg[] = {"/bin/sh", 0};
    execve("/bin/sh", arg, 0);
}

gdb を使用してこのコードをデバッグしようとしています

(gdb) test() を呼び出す
プロセス 1948 が新しいプログラムを実行しています: /bin/dash
警告: 選択されたアーキテクチャ i386:x86-64 は、報告されたターゲット アーキテクチャ i386 と互換性がありません
ファイルのアーキテクチャが認識されません。
GDB から呼び出された関数でエラーが発生しました。
関数を含む式の評価
(テスト)は放棄されます。
関数の実行が完了すると、GDB はサイレントに停止します。

したがって、シェルは産卵していません。それについてどうやって行くのですか?

4

1 に答える 1

3

gdb は、プラットフォームで互換性があるにもかかわらず、異なるアーキテクチャでバイナリを実行することを許可していません。64 ビットの実行可能ファイルから 32 ビットの実行可能ファイルを実行しようとすると、同じことが起こります。これは、gdb の最新バージョン (7.5.1) でも発生します。

他の問題を引き起こさずにコードを 32 ビットとしてコンパイルできる場合は、回避策になります。

Hasturkun のコメントによると、ここで利用可能なパッチがあります。

于 2013-03-11T16:41:18.797 に答える