精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux系列:聊一聊 SystemV 下的進程間共享內存

系統 Linux
前者的System V表示共享內存機制,后面的?10cf21d1?表示共享內存中用到的唯一鍵key,所以這表示當前的 .net 程序直接或者間接的使用了?System V的進程間共享內存,我對 Linux 不是特別熟悉,所以稍微研究了下就有了這篇文章。

一、背景

1. 講故事

昨天在分析一個 linux 的 dump 時,看到了這么一話警告,參考如下:

0:000> !eeheap -gc
*** WARNING: Unable to verify timestamp for SYSV10cf21d1 (deleted)

對,就是上面的 SYSV10cf21d1,拆分一下為 System V + 10cf21d1 ,前者的System V表示共享內存機制,后面的 10cf21d1 表示共享內存中用到的唯一鍵key,所以這表示當前的 .net 程序直接或者間接的使用了 System V的進程間共享內存,我對 Linux 不是特別熟悉,所以稍微研究了下就有了這篇文章。

二、System V 研究

1. 什么是進程間通信

其實在 Linux 中有很多中方式進行 IPC(進程間通信),我用大模型幫我做了一下匯總,截圖如下:

圖片圖片

現如今Linux使用最多的還是 POSIX 標準,而 System V 相對來說比較老,為了研究我們寫一個小例子觀察下基本實現。

2. System V 的一個小例子

為了能夠實現進程間通信,開啟兩個進程(writer,reader)端,一個是往共享內存寫入,一個從共享內存中讀取,畫個簡圖如下:

圖片圖片

接下來在內存段的首位置設置控制flag,后面跟著傳輸的 content 內容,然后創建一個key與申請的內存段進行綁定,參考代碼如下:

1)writer.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>

#define SHM_SIZE 1024 // 共享內存段大小

int main()
{
    key_t key;
    int shmid;
    char *shm_ptr;

    // 生成key值 - 使用當前目錄和項目ID
    if ((key = ftok(".", 'x')) == -1)
    {
        perror("ftok");
        exit(1);
    }

    // 創建共享內存段
    if ((shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666)) == -1)
    {
        perror("shmget");
        exit(1);
    }

    // 附加到共享內存
    if ((shm_ptr = shmat(shmid, NULL, 0)) == (void *)-1)
    {
        perror("shmat");
        exit(1);
    }

    printf("Writer: 連接到共享內存段 %d\n", shmid);

    // 第一個字節作為標志位,其余部分存儲數據
    char *flag_ptr = shm_ptr;
    char *data_ptr = shm_ptr + 1;

    // 初始化標志位
    *flag_ptr = 0;

    // 寫入數據到共享內存
    char message[] = "Hello from writer process!";
    strncpy(data_ptr, message, sizeof(message));

    // 設置標志位表示數據已準備好
    *flag_ptr = 1;

    printf("Writer: 已寫入消息: \"%s\"\n", message);

    // 等待讀取進程完成
    printf("Writer: 等待讀取進程確認...\n");
    while (*flag_ptr != 2)
    {
        sleep(1);
    }

    // 分離共享內存
    if (shmdt(shm_ptr) == -1)
    {
        perror("shmdt");
        exit(1);
    }

    // 刪除共享內存段
    if (shmctl(shmid, IPC_RMID, NULL) == -1)
    {
        perror("shmctl");
        exit(1);
    }

    printf("Writer: 完成\n");

    return0;
}

接下來就是 gcc 編譯并運行,參考如下:

root@ubuntu2404:/data2# gcc -g writer.c -o writer
root@ubuntu2404:/data2# ls   
writer  writer.c
root@ubuntu2404:/data2# ./writer
Writer: 連接到共享內存段 2
Writer: 已寫入消息: "Hello from writer process!"
Writer: 等待讀取進程確認...

從輸出看已經將 "Hello from writer process!" 寫到了共享內存,接下來可以用 ipcs -m 觀察共享內存段列表,以及虛擬地址段。

root@ubuntu2404:/proc# ipcs -m  

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x780300023          root       666        1024       1         

root@ubuntu2404:/proc# ps -ef | grep writer 
root        7711    7593010:41 pts/1    00:00:00 ./writer
root        7714    7618010:41 pts/2    00:00:00 grep --color=auto writer              

root@ubuntu2404:/proc# cat /proc/7711/maps
5b412c9bc000-5b412c9bd000 r--p 0000000008:031966088                    /data2/writer
5b412c9bd000-5b412c9be000 r-xp 0000100008:031966088                    /data2/writer
5b412c9be000-5b412c9bf000 r--p 0000200008:031966088                    /data2/writer
5b412c9bf000-5b412c9c0000 r--p 0000200008:031966088                    /data2/writer
5b412c9c0000-5b412c9c1000 rw-p 0000300008:031966088                    /data2/writer
5b415ad13000-5b415ad34000 rw-p 0000000000:000                          [heap]
...
7c755ce80000-7c755ce81000 rw-s 0000000000:013                          /SYSV78030002 (deleted)
...
ffffffffff600000-ffffffffff601000 --xp 0000000000:000                  [vsyscall]
root@ubuntu2404:/proc#

上面輸出的 /SYSV78030002 (deleted) 便是,哈哈,現在回頭看這句 WARNING: Unable to verify timestamp for SYSV10cf21d1 (deleted) 是不是豁然開朗啦。。。

接下來繼續聊,另一個進程要想讀取共享內存,需要通過同名的key尋找,即下面的 shmget 方法。

2)reader.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>

#define SHM_SIZE 1024 // 共享內存段大小

int main()
{
    key_t key;
    int shmid;
    char *shm_ptr;

    // 生成相同的key值
    if ((key = ftok(".", 'x')) == -1)
    {
        perror("ftok");
        exit(1);
    }

    // 獲取共享內存段
    if ((shmid = shmget(key, SHM_SIZE, 0666)) == -1)
    {
        perror("shmget");
        exit(1);
    }

    // 附加到共享內存
    if ((shm_ptr = shmat(shmid, NULL, 0)) == (void *)-1)
    {
        perror("shmat");
        exit(1);
    }

    printf("Reader: 連接到共享內存段 %d\n", shmid);

    // 第一個字節是標志位,其余是數據
    char *flag_ptr = shm_ptr;
    char *data_ptr = shm_ptr + 1;

    // 等待數據準備好
    printf("Reader: 等待數據...\n");
    while (*flag_ptr != 1)
    {
        sleep(1);
    }

    // 讀取數據
    printf("Reader: 接收到消息: \"%s\"\n", data_ptr);

    // 通知寫入進程已完成讀取
    *flag_ptr = 2;

    // 分離共享內存
    if (shmdt(shm_ptr) == -1)
    {
        perror("shmdt");
        exit(1);
    }

    printf("Reader: 完成\n");

    return0;
}

如果有朋友對綁定邏輯(shmget)的底層感興趣,可以觀察 Linux 中的 ipcget_public 方法,其中的 rhashtable_lookup_fast 便是。

static int ipcget_public(struct ipc_namespace *ns, struct ipc_ids *ids,
  const struct ipc_ops *ops, struct ipc_params *params)
{
struct kern_ipc_perm *ipcp;
int flg = params->flg;
int err;

/*
  * Take the lock as a writer since we are potentially going to add
  * a new entry + read locks are not "upgradable"
  */
 down_write(&ids->rwsem);
 ipcp = ipc_findkey(ids, params->key);
    ...
}

static struct kern_ipc_perm *ipc_findkey(struct ipc_ids *ids, key_t key)
{
struct kern_ipc_perm *ipcp;

 ipcp = rhashtable_lookup_fast(&ids->key_ht, &key,
           ipc_kht_params);
if (!ipcp)
returnNULL;

 rcu_read_lock();
 ipc_lock_object(ipcp);
return ipcp;
}

最后就是相同方式的編譯運行,截一張圖如下:

圖片圖片

三、總結

哈哈,dump分析之旅就是這樣,在分析中不斷的學習新知識,再用新知識指導dump分析,就這樣的不斷的螺旋迭代,樂此不疲。

責任編輯:武曉燕 來源: 一線碼農聊技術
相關推薦

2020-06-28 09:30:37

Linux內存操作系統

2019-03-20 14:29:46

Linux虛擬內存

2023-03-06 21:23:23

Redis數據庫

2021-04-20 08:40:11

內存管理Lwip

2022-05-12 23:19:15

Redis內存碎片處理

2019-02-13 14:15:59

Linux版本Fedora

2022-02-21 15:01:45

MySQL共享鎖獨占鎖

2022-05-18 16:35:43

Redis內存運維

2021-01-26 05:06:24

LinuxXargs 命令

2021-01-04 08:09:07

Linux內核Watchdog

2020-09-08 06:54:29

Java Gradle語言

2023-07-06 13:56:14

微軟Skype

2023-03-03 12:37:50

JavaJVM內存溢出

2018-01-12 14:35:00

Linux進程共享內存

2023-07-03 07:27:41

進程線程Win32

2018-06-07 13:17:12

契約測試單元測試API測試

2019-05-08 11:10:05

Linux進程語言

2021-01-28 22:31:33

分組密碼算法

2023-09-22 17:36:37

2020-05-22 08:16:07

PONGPONXG-PON
點贊
收藏

51CTO技術棧公眾號

日韩电影大全在线观看| 91极品视频在线| 无人码人妻一区二区三区免费| 182tv在线播放| 91亚洲精华国产精华精华液| 国产精品第七影院| 久久精品一级片| 国内精品久久久久久久久电影网| 欧美一卡二卡在线观看| 1024av视频| 国产网站在线免费观看| 26uuu精品一区二区在线观看| 国产精品爽爽ⅴa在线观看| 久久黄色免费视频| 清纯唯美日韩| 亚洲第一色在线| 亚洲免费一级视频| 波多野结衣中文字幕久久| 91美女片黄在线观看| 国产精品久久久久久亚洲影视| 久久噜噜色综合一区二区| 红杏视频成人| 欧美日韩亚洲不卡| 18禁裸男晨勃露j毛免费观看| 欧洲精品久久一区二区| 日韩电影在线免费观看| 欧美日本在线视频中文字字幕| 国产呦小j女精品视频| 国产美女视频一区二区| 欧美午夜激情视频| 日本成人性视频| 男女视频在线观看免费| 国产成人亚洲综合a∨猫咪| 欧洲亚洲在线视频| 欧美日韩成人免费观看| 国产影视一区| 精品国产电影一区二区| 奇米视频7777| 日韩在线伦理| 亚洲人一二三区| 秋霞毛片久久久久久久久| 精品国产99久久久久久宅男i| 久久国产精品久久w女人spa| 欧美精品在线视频观看| 国产三级在线观看完整版| 欧美福利在线播放网址导航| 日韩欧美一级精品久久| 91小视频网站| 国产一区二区主播在线| 午夜精品久久久久久久99水蜜桃 | 日韩最新免费不卡| 亚洲天堂视频一区| 日韩欧美国产大片| 精品国产一区二区亚洲人成毛片| 性欧美1819| 全亚洲第一av番号网站| 天天综合色天天| 手机成人av在线| 嫩草研究院在线观看| 99精品欧美一区二区三区小说| 91亚洲人电影| 99视频国产精品免费观看a| 全国精品久久少妇| 国产精品欧美日韩久久| 无码人妻av免费一区二区三区 | 亚洲永久精品一区| 午夜亚洲福利在线老司机| 韩国精品美女www爽爽爽视频| 中文字幕手机在线观看| 中文字幕一区二区三区欧美日韩| www.亚洲成人| 免费成年人视频在线观看| 久久福利综合| 欧美巨猛xxxx猛交黑人97人| 欧美丰满熟妇bbbbbb| 亚洲深深色噜噜狠狠爱网站| 亚洲午夜未满十八勿入免费观看全集| av av在线| 欧洲大片精品免费永久看nba| 欧美精品电影在线播放| 激情 小说 亚洲 图片: 伦| 国内精品视频一区二区三区| 免费高清在线观看免费| 嫩草香蕉在线91一二三区| 国产精品视频一区二区三区不卡| 日韩欧美电影一区二区| 一区二区高清不卡| 亚洲视频资源在线| 日韩免费在线观看av| 国产盗摄在线视频网站| 亚洲va欧美va人人爽午夜| 激情深爱综合网| 韩国美女久久| 欧美日韩久久久久久| 中文 日韩 欧美| 白嫩白嫩国产精品| 亚洲欧美日韩直播| 永久免费毛片在线观看| 成人无号精品一区二区三区| 在线亚洲欧美视频| 久久久综合久久久| 亚洲综合社区| 91视频88av| 免费a视频在线观看| 久久综合狠狠综合| 亚洲欧美精品在线观看| 四虎影院观看视频在线观看| 舔着乳尖日韩一区| 在线观看免费视频高清游戏推荐| 国产一区精品二区| 日韩av在线免播放器| 一级片久久久久| 韩日精品视频| 国产精品久久久久9999| 国产丰满美女做爰| 久久久精品一品道一区| 国产四区在线观看| 成人勉费视频| 欧美一卡二卡三卡四卡| 亚洲一级中文字幕| 欧美影视一区| 国产精品久久久久免费a∨大胸 | 欧美精品乱人伦久久久久久| 精品人妻在线视频| 四虎成人精品永久免费av九九| 色综合老司机第九色激情| www.av88| 97久久超碰国产精品| 中文字幕中文字幕99| 在线观看特色大片免费视频| 欧美精品精品一区| 黄色片网站免费| 亚洲日本黄色| 亚洲自拍偷拍一区| 草碰在线视频| 欧美日韩亚洲一区二区三区| 99视频在线观看视频| 激情综合网站| 欧洲精品毛片网站| 隣の若妻さん波多野结衣| 中文字幕一区在线| 福利在线一区二区三区| 亚洲动漫在线观看| 欧美第一页在线| 99久久久国产精品无码免费| 亚洲国产高清不卡| 国产v亚洲v天堂无码久久久| 国产福利资源一区| 欧美激情va永久在线播放| 91麻豆一区二区| 国产精品视频在线看| 欧在线一二三四区| 婷婷亚洲成人| 2019中文字幕在线观看| 亚洲精品国偷拍自产在线观看蜜桃| 国产精品久久久久国产精品日日| 成人一区二区三| 综合亚洲色图| 欧美在线视频观看| 手机福利在线| 欧美日韩另类视频| 久久精品综合视频| 午夜在线精品偷拍| 欧美不卡在线一区二区三区| 极品av在线| 亚洲欧美日韩精品久久| 欧美三级午夜理伦| 成人永久免费视频| 国产精品videossex国产高清 | 国产精品成熟老女人| 日韩a在线观看| 欧美日韩亚洲网| 成人精品999| 日韩不卡一区二区三区| 日本免费高清一区| 成人黄色毛片| 久久伊人免费视频| 精品人妻久久久久一区二区三区 | 国产精品一区二区视频| 99亚洲精品视频| 日韩欧美中文字幕一区二区三区 | 国产精品网站入口| 成年网站在线| 欧美日韩国产成人在线免费| 久久精品www人人爽人人| 成人app下载| 国产aaa一级片| 色喇叭免费久久综合| 国产欧美一区二区三区在线 | 久久99视频精品| 日本高清视频www| 色欲综合视频天天天| 久久久久久久久福利| 国产精品18久久久久久久久 | 91亚洲精华国产精华| 国内老司机av在线| 日韩成人中文字幕| 亚洲一级在线播放| 伊人一区二区三区| 蜜桃精品成人影片| 久久97超碰国产精品超碰| 日韩中文字幕在线不卡| 欧美美女啪啪| 国产一区二区丝袜| 岛国片av在线| 在线播放日韩欧美| 99久久亚洲精品日本无码 | 久久精品久久久久久久| 国产精品久久久久久久久动漫| 日本人妻一区二区三区| 免费永久网站黄欧美| 宅男在线精品国产免费观看| 国产成人一二片| 国产精选久久久久久| 里番在线播放| 最近2019中文字幕在线高清| 免费国产羞羞网站视频| 欧美综合一区二区| 日干夜干天天干| 中文字幕人成不卡一区| 星空大象在线观看免费播放| 久久精品国产亚洲一区二区三区| 91视频成人免费| 亚洲免费福利一区| 3d精品h动漫啪啪一区二区| 高清成人在线| 97视频人免费观看| а天堂中文在线官网| 亚洲天堂免费视频| 日韩一级免费视频| 欧美一级视频精品观看| 天天爱天天做天天爽| 午夜欧美在线一二页| 国产av无码专区亚洲av毛网站| 久久婷婷国产综合国色天香| 在线观看一区二区三区视频| 奇米一区二区三区| 免费av网址在线| 亚洲国产婷婷| 久久久国内精品| 忘忧草精品久久久久久久高清| 欧美系列一区| 91欧美极品| 国产精品视频一区二区三区四| 北岛玲heyzo一区二区| 久久夜色精品国产| 91精彩视频在线播放| 亚洲三级黄色在线观看| 天天av天天翘| 亚洲第一福利网| 亚洲第一页在线观看| 91麻豆精品国产综合久久久久久| 亚洲 欧美 中文字幕| 大桥未久av一区二区三区| 久草视频手机在线观看| 亚洲欧美一区二区三区久本道91 | 综合久久五月天| 你懂的好爽在线观看| 亚洲成人aaa| av在线资源观看| 91精品啪在线观看国产60岁| 91国内精品视频| 欧美视频在线观看一区二区| 一级一片免费看| 欧美色视频日本版| 综合网在线观看| 色综合视频一区二区三区高清| 日本道在线观看| 欧美性极品xxxx娇小| www.毛片.com| 色94色欧美sute亚洲线路二 | 国产精品久久久久免费a∨| 免费污视频在线一区| 国产欧美精品一区二区三区介绍| 日本午夜免费一区二区| 国产精品一区二区久久国产| 日韩av超清在线观看| 欧亚精品在线观看| 成人午夜毛片| 92看片淫黄大片看国产片| 视频一区日韩| 久久99国产精品| 国产成人一区| 一区二区日本伦理| 欧美 日韩 国产 一区| 无码av天堂一区二区三区| 国产精品嫩草99av在线| 免费日韩视频在线观看| 蜜桃av一区二区三区电影| xxxxwww一片| 99v久久综合狠狠综合久久| 草草影院第一页| 国产精品久99| 久久国产精品波多野结衣| 欧美视频精品一区| 亚洲天堂狠狠干| 日韩美一区二区三区| 色吊丝在线永久观看最新版本| 国产一区二区av| 91麻豆一二三四在线| 欧美在线视频一二三| 欧美亚洲福利| 狠狠色噜噜狠狠色综合久| 欧美日韩精品在线一区| 亚洲高潮无码久久| 亚洲一区区二区| www.色欧美| 26uuu亚洲| 亚洲av无码一区二区三区在线| 天涯成人国产亚洲精品一区av| 中文字幕人妻一区二区三区视频 | av欧美精品.com| 手机av在线不卡| 精品国产91久久久久久老师| 中文字幕一区二区在线视频| 亚洲成人网av| 欧美三级黄网| 2019中文字幕在线观看| 成人在线啊v| 欧美日韩精品免费观看| 中文字幕一区二区av | 色www永久免费视频首页在线| 国产91露脸中文字幕在线| 亚洲国产精品免费视频| 日本一区二区三区四区在线观看 | 久久久久久久极品| 3atv一区二区三区| 国产女主播在线写真| 欧美国产亚洲精品久久久8v| 91国内外精品自在线播放| 国产一区自拍视频| 欧美96在线丨欧| the porn av| 久久久噜噜噜久久中文字幕色伊伊| 免费中文字幕在线| 欧美日韩亚洲国产综合| 久草在线青青草| 97视频在线观看免费高清完整版在线观看| 日日狠狠久久| 视频在线99re| 欧美综合二区| 中文字幕无码人妻少妇免费| 亚洲免费观看在线视频| 亚洲第一在线播放| 精品日韩在线观看| 视频在线观看入口黄最新永久免费国产| 国产精品久久久久久久久久久久久久| 欧美人与动xxxxz0oz| 国产青草视频在线观看| 国产剧情一区二区| 美女三级黄色片| 欧美三级一区二区| 九一国产在线| 国产ts一区二区| heyzo欧美激情| 97干在线视频| av午夜精品一区二区三区| 日韩少妇裸体做爰视频| 亚洲高清一区二| 91超碰在线播放| 国产一区不卡在线观看| 亚洲大黄网站| 黄色网址在线视频| 夜夜揉揉日日人人青青一国产精品| 国产精品成人久久久| 最近中文字幕日韩精品 | 亚洲成a人v欧美综合天堂下载| 亚洲美女综合网| 久久欧美在线电影| 日韩mv欧美mv国产网站| 欧美视频在线播放一区| 91视频免费看| 懂色av蜜臀av粉嫩av喷吹| 亚洲美女视频网| 欧洲av一区二区| 一区二区不卡在线观看| 国产综合成人久久大片91| 朝桐光av在线| 日韩三级高清在线| 182在线视频观看| 欧美一区二区三区精美影视 | 成人高清dvd| 波多野结衣视频一区| 九九热国产在线| 精品国产电影一区二区| 色猫猫成人app| 992tv成人免费观看| 成人免费福利片| 欧美超碰在线观看| 久久久久www| 高清精品xnxxcom| 国产成人亚洲精品无码h在线| 国产亚洲精品aa午夜观看| 91亚洲国产成人久久精品麻豆| 久久6精品影院| 美女网站一区| 亚洲精品在线网址| 岛国av一区二区三区| 精品无人乱码| 91免费视频国产|