是否有一种方法可以在没有ptrace
的情况下将代码注入到ELF二进制文件中,因为我正在编写此程序的程序正在使用GDB,所以我无法使用它,而我不想在它停止的同时停止该过程注射。我读到可以通过使用/proc/pid/mem
来实现,但是我找不到关于如何执行此操作的任何信息。我也不想使用LD_PRELOAD
,因为它需要重新启动程序,并且我想在运行时执行。
编辑:由于该进程可能已经由gdb附加,所以我不能使用ptrace
/proc/pid/mem
的行为类似于进程内存的图像。要在某个地址写入一个字节,只需打开/proc/pid/mem
,然后打开lseek
到所需的地址,然后打开read()
或write()
,无论您想要多少字节。
例如,在使用0x12345
的过程中覆盖地址0x90
的字节,您可以这样做
fd = open("/proc/XXX/mem", O_RDWR);
lseek(fd, 0x12345, SEEK_SET);
unsigned char new = 0x90;
write(fd, &new, 1);
请注意,访问/proc/XXX/mem
所需的权限与跟踪进程的权限相同。特别是,在某些系统上,您可能需要成为root用户。