Tôi có một chương trình sử dụng LD_PRELOAD. Chương trình sẽ chạy như điều này, "LD_PRELOAD =/path/to/libfoo.so qemu -U LD_PRELOAD a.out", nếu không có gdb.Làm thế nào để chạy gdb với LD_PRELOAD?
Dưới đây là những gì tôi đã làm khi chạy gdb.
(gdb) set environment LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so
(gdb) file /nfs_home/chenwj/tools/bin/qemu-i386
(gdb) r -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1
Nhưng gdb đã cho tôi lỗi dưới đây
Starting program: /nfs_home/chenwj/tools/bin/qemu-i386 -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1
bash: open "/bin/bash" failed: Permission denied
During startup program exited with code 66.
Bất kỳ đề xuất nào được đánh giá cao.
Trân trọng, chenwj
Điều gì libdbo.so làm là cố gắng thực thi trước __libc_start_main thực, truy xuất dữ liệu từ chú thích bzip2_base.i386-m32-gcc44, sau đó chuyển đến __libc_start_main thực. Nó chỉ ra rằng LD_PRELOAD không chỉ ảnh hưởng đến qemu-i386 mà còn là bash được gọi bởi gdb. Lỗi xảy ra kể từ khi bash muốn mở một số tập tin mà nó không nên (bash cũng bị ảnh hưởng bởi LD_PRELOAD, và nó sẽ thực hiện __libc_start_main được cung cấp bởi libdbo.so). Giải pháp khá đơn giản. 'set exec-wrapper env 'LD_PRELOAD =/path/to/libdbo.so'' sẽ thực hiện thủ thuật. – chenwj