GDB如何为单个进程禁用地址空间布局随机化(ASLR)?
GDB如何仅为当前进程禁用ASLR?
我了解到GDB会为当前进程禁用ASLR,但之前只知道通过执行echo 0 > /proc/sys/kernel/randomize_va_space全局禁用ASLR的方法,现在想知道GDB如何在启动时仅为当前进程禁用ASLR?
编辑
按照建议,我编写了一个测试程序:
#include <stdio.h> #include <unistd.h> #include <sys/personality.h> int main(int argc, char **argv){ char *argv2[] = { argv[0], "test", "\0" }; if (argc == 1) { char *data = malloc(20); printf("pid %d\n", getpid()); printf("heap allocated at %p\n", data); printf("system() at %p\n", system); puts("exit in 100s"); sleep(100); exit(0); } personality(ADDR_NO_RANDOMIZE); execvp(argv2[0], argv2); }
进程映射如下:
# cat /proc/1997932/maps 00400000-00401000 r--p 00000000 fc:01 430424 /root/no-aslr 00401000-00402000 r-xp 00001000 fc:01 430424 /root/no-aslr 00402000-00403000 r--p 00002000 fc:01 430424 /root/no-aslr 00403000-00404000 r--p 00002000 fc:01 430424 /root/no-aslr 00404000-00405000 rw-p 00003000 fc:01 430424 /root/no-aslr 01352000-01373000 rw-p 00000000 00:00 0 [heap] 7f222f928000-7f222f94a000 r--p 00000000 fc:01 394264 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f222f94a000-7f222fac2000 r-xp 00022000 fc:01 394264 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f222fac2000-7f222fb10000 r--p 0019a000 fc:01 394264 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f222fb10000-7f222fb14000 r--p 001e7000 fc:01 394264 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f222fb14000-7f222fb16000 rw-p 001eb000 fc:01 394264 /usr/lib/x86_64-linux-gnu/libc-2.31.so
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

