20

以下の簡単なコードをコンパイルして、gdbで実行します。strcpyラインにブレークポイントを設定しました。たとえばabcの入力に対してブレークポイントを実行し、sを押すとすぐに、次のエラーが発生します。

Breakpoint 1, main (argc=2, argv=0x7fffffffdd98) at ExploitMe.c:9
9           strcpy(buffer, argv[1]);
(gdb) s
__strcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:48
48  ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory.

私はubuntu12.04AMD64とgcc2.15を使用しています。何か案が?


main(int argc, char *argv[]) {

    char buffer[80];

    strcpy(buffer, argv[1]);

    return 0;
}
4

1 に答える 1

20

デバッグ時にこれらの「エラー」を無視してもまったく害はありません。

エラーは、GDB がstrcpy関数のソースを探しているためです。ソースを持っていない libc の関数は、同様のエラーを出します。

int *p = malloc(sizeof *p);

それで...

(gdb) s
5       int *p = malloc(sizeof *p);
(gdb) s
__GI___libc_malloc (bytes=4) at malloc.c:2910
2910    malloc.c: No such file or directory.

GNU libc のソースをいつでもダウンロードして、GDB にリンクできます。

git clone https://github.com/jeremie-koenig/glibc /opt/src/glibc

それで...

(gdb) dir /opt/src/glibc/malloc
(gdb) s
5       int *p = malloc(sizeof *p);
(gdb) s
__GI___libc_malloc (bytes=4) at malloc.c:2910
2910              }
(gdb) s
2915          } else if (!in_smallbin_range(size))

...mallocのソース コードをステップ実行できます。特に便利というわけではありませんが、ときどき役に立ちます。

于 2012-12-20T19:21:28.863 に答える