gpt4 book ai didi

security - 程序可以直接分配内存吗?

转载 作者:IT王子 更新时间:2023-10-28 23:39:03 26 4
gpt4 key购买 nike

是否有任何真正低级的编程语言可以直接访问内存变量?例如,如果我有一个程序有一个变量 i。任何人都可以访问内存以将我的程序变量 i 更改为另一个值吗?

最佳答案

作为如何从“外部”更改程序中的变量的示例,请考虑使用调试器。示例程序:

$ cat print_i.c
#include <stdio.h>
#include <unistd.h>

int main (void) {
int i = 42;
for (;;) { (void) printf("i = %d\n", i); (void) sleep(3); }
return 0;
}
$ gcc -g -o print_i print_i.c
$ ./print_i
i = 42
i = 42
i = 42

(程序每 3 秒打印一次 i 的值。)

在另一个终端中,找到正在运行的程序的进程 id 并将 gdb 调试器附加到它:


$ ps | grep print_i
1779 p1 S+ 0:00.01 ./print_i
$ gdb print_i 1779

(gdb) bt
#0 0x90040df8 in mach_wait_until ()
#1 0x90040bc4 in nanosleep ()
#2 0x900409f0 in sleep ()
#3 0x00002b8c in main () at print_i.c:6
(gdb) up 3
#3 0x00002b8c in main () at print_i.c:6
6 for (;;) { (void) printf("i = %d\n", i); (void) sleep(3); }
(gdb) set variable i = 666
(gdb) continue

现在程序的输出发生了变化:


i = 42
i = 42
i = 666

所以,是的,如果您可以访问程序的内存,则可以从“外部”更改程序的变量。这里有很多警告,例如需要找到变量的存储位置和方式。在这里很容易,因为我用调试符号编译了程序。对于任意语言的任意程序,这要困难得多,但理论上仍然可行。当然,如果我不是正在运行的进程的所有者,那么一个表现良好的操作系统不会让我访问它的内存(没有“黑客攻击”),但这完全是另一个问题。

关于security - 程序可以直接分配内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com