linux – 有没有人知道是否有人集成了libsegfault.so和gdbserver以便将gdb附加到崩溃的程序中
发布时间:2020-05-23 00:08:31 所属栏目:Linux 来源:互联网
导读:它在 http://sourceware.org/ml/gdb/2007-06/msg00360.html之前提到过. 但似乎没有人真正实现过这种想法. 实现这个有什么障碍吗? 我的要求如下: 能够插入任何精灵二进制可执行文件(例如,使用LD_PRELOAD) 二进制文件可能是多线程可执行文件 二进制文件可以链
|
它在
http://sourceware.org/ml/gdb/2007-06/msg00360.html之前提到过.
我的要求如下: >能够插入任何精灵二进制可执行文件(例如,使用LD_PRELOAD) 所以,如果已经有这样的解决方案,我想要一个链接,但如果还没有,我想知道为什么它还没有作为一个轮子实现. 除了将代码放在一起之外,还需要任何技术或政治问题. 解决方法似乎并不太难.$./a.out Caught signal at 0x400966: Segmentation fault Segmentation fault $GDB_COMM=:1024 ./a.out Caught signal at 0x400966: Segmentation fault Attached; pid = 2369 Listening on port 1024 $gdb ./a.out Reading symbols from /home/me/a.out...done. (gdb) target remote :1024 Remote debugging using :1024 #define _XOPEN_SOURCE 500
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
static char *gdb_comm;
static void segv_handler(int sig,siginfo_t *si,void *uc) {
pid_t child;
char msg[84],pid[20];
char *const argv[] = {"gdbserver",gdb_comm,"--attach",pid,NULL};
sprintf(msg,"Caught signal at %p",si->si_addr);
psignal(si->si_signo,msg);
if (gdb_comm && *gdb_comm) {
switch ((child = fork())) {
case 0:
sprintf(pid,"%ld",(long)getppid());
execvp(argv[0],argv);
perror("Failed to start gdbserver");
_exit(-1);
case -1:
perror("failed to fork");
default:
waitpid(child,NULL,0);
break;
}
}
}
int main(int argc,char **argv) {
static struct sigaction segv_action = {
.sa_sigaction = segv_handler,.sa_flags = SA_RESETHAND | SA_SIGINFO,};
gdb_comm = getenv("GDB_COMM");
sigaction(SIGILL,&segv_action,NULL);
sigaction(SIGFPE,NULL);
sigaction(SIGSEGV,NULL);
sigaction(SIGBUS,NULL);
*(int *)main = 0;
return 0;
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- AWK:如果这个是正则表达式,有没有办法将OFS设置为FS?
- linux – Dovecot启动和运行,但没有监听任何端口
- c – 如何开始调试?
- macos – 如何在OS X上使用ditto在Linux上像cp -a一样工作
- 自动完成 – 我可以在zsh中使用自动完成kubectl吗?
- 在Linux上使用Apache HTTP Server进行集成Windows身份验证
- linux – Golang:什么是etext?
- linux – 如何将凭证文件传递给mount.cifs?
- 相当于SysInternals FileMon for Linux?
- linux-kernel – 使用populate_sdk包含内核头文件
