簡體   English   中英

是否可以關閉此功能以允許不同程序通過 memory 地址和 C 訪問同一塊?

[英]Is it possible to turn off this feature to allow different programs access the same block via memory address with C?

我試圖了解 memory 地址是如何工作的。 這是代碼。

#include <stdio.h>

int main()
{
    int i = 127, * p;
    p = &i;
    long j = 0;
    printf("%d\n", i);
    printf("%d\n", *p);
    printf("%p\n", (void*)&i);
    scanf("%lx", &j);
    p = (int *)j;
    printf("%d\n", *p);
    return 0;
}

我同時運行代碼 2 次,得到 2 個正在運行的程序等待輸入。

假設 program_1 給出0x7ffd66359b78而 program_2 給出0x7ffc8b0d7af8

如果我為 program_1 輸入7ffd66359b78我得到127

如果我為 program_1 輸入7ffc8b0d7af8我得到

信號:分段錯誤(核心轉儲)

這意味着我在程序執行期間獲得的 memory 地址僅適用於該程序的執行,我的理解是否正確?

我想這是某種操作系統安全功能。 它叫什么名字? 是否可以關閉此功能以允許不同程序通過 memory 地址訪問同一塊?

這意味着我在程序執行期間獲得的 memory 地址僅適用於該程序的執行,我的理解是否正確?

是的。

我想這是某種操作系統安全功能。 它叫什么名字?

最重要的是,虛擬 memoryASLR

基本上,簡單來說,每個進程都有一個隱藏數字,當訪問 memory 時,該數字會添加到地址中。 https://en.wikipedia.org/wiki/Memory_management_unit

是否可以關閉此功能以允許不同程序通過 memory 地址訪問同一塊?

它被稱為共享 memoryhttps://en.wikipedia.org/wiki/Inter-process_communication#Approaches

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM