我有一个使用LD_PRELOAD的程序.如果没有gdb,程序应该像这样运行,"LD_PRELOAD =/path/to/libfoo.so qemu -U LD_PRELOAD a.out".
这是我在运行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
但是gdb给了我下面的错误
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.
任何建议都表示赞赏.
此致,chenwj
sa_sigaction 的第三个参数是一个指向机器相关的指针struct ucontext,我想知道我可以从中转储什么struct ucontext。
void (*sa_sigaction)(int signum, siginfo_t *info, void *ucontext)
struct ucontext {
unsigned long uc_flags;
struct ucontext *uc_link;
stack_t uc_stack;
struct sigcontext uc_mcontext;
sigset_t uc_sigmask; /* mask last for extensibility */
};
Run Code Online (Sandbox Code Playgroud)
特别是通过 uc_mcontext(如果你能告诉我在哪里我可以了解更多关于其他数据成员的信息,那就太好了),因为人们通常用来uc_mcontext像这样转储主机寄存器,
ucontext->uc_mcontext.gregs[REG_EIP]
Run Code Online (Sandbox Code Playgroud)
因为uc_mcontext类型是struct sigcontext,我看就struct sigcontext在arch/x86/include/asm/sigcontext.h。
struct sigcontext {
unsigned short gs, __gsh;
unsigned short fs, __fsh;
unsigned short es, __esh;
unsigned short ds, __dsh;
... snip ...
};
Run Code Online (Sandbox Code Playgroud)
它是正确的,怎么一回事,因为我看不到gregs的 …