You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:05:19