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

Linux:如何調試 Malloc 的底層源碼

系統 Linux
對 Win32 級別的 libc 進行源碼調試,有助于我們對書籍中那些malloc的底層理論知識有一個很好的眼見為實,也是給Linux上的.NET高級調試打開了一扇窗!

一、背景 

1. 講故事

上一篇我們聊過 C# 調用 C 的 malloc 代碼來演示heap的內存泄露問題,但要想深入研究得必須把 malloc 的實現庫 libc.so 給調試起來,大家都知道在Linux 上 libc 和 Windows 的 Win32 API 是一個層級的,由于 Linux 重度依賴 libc,比較吐槽的是兩者各自為政,如果手工編譯 libc,容易搞出很多兼容性問題,這一點真的不如 Windows 的大一統來的痛快,手工編譯比較繁瑣,用此篇來記錄下。

二、手工編譯 libc 

1. 下載 libc 2.39 源代碼

要想知道下載哪個版本的 libc,可以用 ldd 觀察現存的 libc 版本,參考如下:

root@ubuntu2404:/data# ldd /bin/bash | grep libc
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x0000737556800000)
root@ubuntu2404:/data# /lib/x86_64-linux-gnu/libc.so.6
GNU C Library (Ubuntu GLIBC 2.39-0ubuntu8.4) stable release version 2.39.
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the sourcefor copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 13.3.0.
libc ABIs: UNIQUE IFUNC ABSOLUTE
Minimum supported kernel: 3.2.0
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.

從卦象看,當前 libc 的版本是 Ubuntu GLIBC 2.39-0ubuntu8.4,接下來下載 2.39 版本的源代碼進行編譯即可。

root@ubuntu2404:/src# wget http://ftp.gnu.org/gnu/libc/glibc-2.39.tar.gz
root@ubuntu2404:/src# tar -xzf glibc-2.39.tar.gz && cd glibc-2.39 && mkdir build && cd build
root@ubuntu2404:/src/glibc-2.39/build# ../configure --prefix=/usr --enable-debug=yes
root@ubuntu2404:/src/glibc-2.39/build# make -j$(nproc)
root@ubuntu2404:/src/glibc-2.39/build# ./libc.so --version
GNU C Library (GNU libc) stable release version 2.39.
Copyright (C) 2024 Free Software Foundation, Inc.
...

稍等片刻后,就可以看到源碼編譯出來的 libc.so ,截圖如下:

圖片

2. 配置 C 代碼

寫了一段簡單的 C 代碼,參考如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    // getchar();    !!! 先注釋掉的,后續放開
    void *ptr = malloc(100);
    if (ptr == NULL)
    {
        fprintf(stderr, "malloc failed\n");
        return1;
    }
    free(ptr);
    printf("malloc and free succeeded\n");
    getchar();
    return0;
}

為了能夠加載我的libc庫,使用 `LD_PRELOAD` 環境變量指定,本想用 gdb 啟動調試的方式執行 main,無奈編譯出來的 __vdso_timeDuring 和 kernel 有兼容性問題導致報錯,輸出如下:

``` C#
root@ubuntu2404:/data# gdb ./main
Reading symbols from ./main...
(gdb) set environment LD_PRELOAD /src/glibc-2.39/build/libc.so
(gdb) run
Starting program: /data/main 
     58340: __vdso_timeDuring startup program terminated with signal SIGSEGV, Segmentation fault.

一定搗鼓之后,我發現不用 gdb 啟動就沒有問題,同時內存段也掛上了我的自定義libc,太棒了,輸出如下:

root@ubuntu2404:/data# LD_PRELOAD=/src/glibc-2.39/build/libc.so ./main
mallocandfree succeeded

root@ubuntu2404:/src/glibc-2.39/build# ps -ef | grep main
root       58361    1251013:55 pts/0    00:00:00 ./main
root       58366    1869013:56 pts/1    00:00:00 grep --color=auto main

root@ubuntu2404:/src/glibc-2.39/build# cat /proc/58361/maps
60fc4cd29000-60fc4cd2a000 r--p 0000000008:031703942                    /data/main
60fc4cd2a000-60fc4cd2b000 r-xp 0000100008:031703942                    /data/main
60fc4cd2b000-60fc4cd2c000 r--p 0000200008:031703942                    /data/main
60fc4cd2c000-60fc4cd2d000 r--p 0000200008:031703942                    /data/main
60fc4cd2d000-60fc4cd2e000 rw-p 0000300008:031703942                    /data/main
60fc8a96c000-60fc8a98d000 rw-p 0000000000:000                          [heap]
7add43aaa000-7add43aad000 rw-p 0000000000:000
7add43aad000-7add43ad1000 r--p 0000000008:032915675                    /src/glibc-2.39/build/libc.so
7add43ad1000-7add43c21000 r-xp 0002400008:032915675                    /src/glibc-2.39/build/libc.so
7add43c21000-7add43c78000 r--p 0017400008:032915675                    /src/glibc-2.39/build/libc.so
7add43c78000-7add43c7c000 r--p 001ca000 08:032915675                    /src/glibc-2.39/build/libc.so
7add43c7c000-7add43c7e000 rw-p 001ce000 08:032915675                    /src/glibc-2.39/build/libc.so
...

這就叫在絕望中尋找希望,既然能運行,那就用 gdb 附加調試吧,只要能研究到 malloc 的底層代碼才是最終目的。。。

把 main() 函數入口的 getchar() 給注釋掉,方便在 malloc 之前通過 attach 附加,為了能夠在 vscode 中操作,新增一個對可執行文件可控的 launch.json,內容如下:

{
    "configurations": [
        {
            "name": "C/C++: gcc build and debug active file",
            "type": "cppdbg",
            "request": "attach",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "processId": "${command:pickProcess}",      // 選擇要附加的進程
            "stopAtEntry": false,
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
        }
    ],
    "version": "2.0.0"
}

再新增一個 gcc 編譯的 task 任務文件 (task.json),內容如下:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc build active file",
            "command": "/usr/bin/gcc",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

稍微解釋一下:

  • "processId": "${command:pickProcess}" 表示彈框選擇你要附加的進程。
  • "request": "attach" 使用附加進程的模式

在 vscode 中使用 Ctrl+Shift+B 或者 gcc -g main.c -o main 對代碼進行構建,接下來執行代碼。

root@ubuntu2404:/data# LD_PRELOAD=/src/glibc-2.39/build/libc.so ./main

root@ubuntu2404:/src/glibc-2.39/build# ps -ef | grep main
root       58992    1251  0 14:14 pts/0    00:00:00 ./main
root       58999    1869  0 14:16 pts/1    00:00:00 grep --color=auto main

點擊UI中 Run -> Start Debugging 選擇要附加的 pid=58992 ,截圖如下:

圖片圖片

3. 觀察效果

vscode 附加成功后,在 UI 上 Enter 回車過掉 getchar(),單步 F11 調試即可進入 malloc 方法實現,挺有意思的,最后給大家截一張大圖:

圖片圖片

三、總結 

對 Win32 級別的 libc 進行源碼調試,有助于我們對書籍中那些malloc的底層理論知識有一個很好的眼見為實,也是給Linux上的.NET高級調試打開了一扇窗!


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

2025-09-26 05:11:00

2021-03-26 22:23:13

Python算法底層

2022-08-03 11:00:20

Linux內核

2024-09-03 09:15:37

2023-08-11 08:42:49

泛型工廠繼承配置

2022-07-31 19:57:26

react項目VSCode

2025-11-17 00:00:55

2013-05-28 10:52:07

Android開發移動開發移動應用

2024-07-26 00:00:12

2022-10-21 13:52:56

JS 報錯調試本地源碼

2016-12-16 09:23:29

LinuxShell腳本

2011-09-13 17:44:00

Eclipse And

2022-10-27 06:48:23

sourcemap源碼Element

2021-07-20 10:26:53

源碼底層ArrayList

2010-06-02 09:31:43

Linux core

2022-08-25 14:52:42

技術架構工具

2017-10-23 10:13:18

IO底層虛擬

2020-08-20 17:00:14

ProcDumpLinux

2017-09-25 08:04:31

Linux調試器源碼級斷點

2017-08-28 14:40:57

Linux調試器源碼和信號
點贊
收藏

51CTO技術棧公眾號

开心九九激情九九欧美日韩精美视频电影 | 日韩经典中文字幕在线观看| 九一国产精品视频| 国产网站在线播放| 国产精品影音先锋| 欧美亚洲激情视频| 国产三级国产精品国产国在线观看| 一区二区三区在线资源| 欧美主播一区二区三区| 中文精品无码中文字幕无码专区| 欧美zozo| 高清免费成人av| 国产精品成人久久久久| 欧美成人一二三区| 欧洲杯什么时候开赛| 日韩精品综合一本久道在线视频| www.com毛片| 26uuu亚洲电影在线观看| 久久久久久久久一| 国产伦精品一区二区三区视频免费| 黄色大全在线观看| 99精品国产在热久久婷婷| 日韩性生活视频| 精品人妻无码一区二区三区换脸| 日韩视频一区二区三区四区| 91国内精品野花午夜精品| 可以看毛片的网址| 在线中文字幕视频观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产精品久久久一区二区| 久久精品国产欧美激情| av黄色免费网站| 国产毛片久久久| 日韩视频永久免费| 17c国产在线| 亚洲精品一区三区三区在线观看| 亚洲自拍偷拍麻豆| 男女h黄动漫啪啪无遮挡软件| 国产毛片在线| 91理论电影在线观看| 成人av影视在线| 精品人妻午夜一区二区三区四区 | 天天操天天综合网| 久草免费福利在线| 黄色美女视频在线观看| 亚洲黄色小视频| 91社在线播放| 黄色在线免费网站| 国产精品国产三级国产aⅴ原创| 欧美日韩另类丝袜其他| 三级视频在线| 久久久三级国产网站| 精品国产乱码久久久久久丨区2区| 精品国产伦一区二区三区| 国产一区二区三区免费看| 国产精品麻豆va在线播放| 久久影视中文字幕| 免费高清在线一区| 成人激情视频网| 国产精品嫩草影院桃色| 国产一区啦啦啦在线观看| 成人欧美在线视频| 国产高潮流白浆喷水视频| 国产精品一区专区| 国产精品制服诱惑| 日本天堂在线| 中文欧美字幕免费| 992tv成人免费观看| 亚洲91av| 精品国产31久久久久久| 日韩欧美xxxx| 国产精品久久久久久久久久齐齐 | 亚洲天堂a在线| 成年丰满熟妇午夜免费视频| 欧美韩日亚洲| 丰满岳妇乱一区二区三区| 欧美日韩在线成人| 四虎地址8848精品| 精品国产伦理网| 亚洲人成人无码网www国产| 日韩激情一区| 欧美国产第二页| 日日夜夜综合网| 麻豆精品在线视频| 高清免费日韩| 国内在线免费高清视频| 亚洲视频免费在线观看| 国产主播自拍av| 国模私拍国内精品国内av| 欧美一级片免费看| 国产免费看av| 亚洲国产精品成人| 欧美在线观看网址综合| 91无套直看片红桃| av一本久道久久综合久久鬼色| 欧美中文娱乐网| 大片免费在线观看| 色综合久久88色综合天天免费| 奇米影视四色在线| 欧美性生活一级片| 久久久精品久久久久| 91av在线免费视频| 国产一区二区三区综合| 久99久视频| 18+视频在线观看| 色8久久精品久久久久久蜜| 四虎国产精品永久免费观看视频| 女仆av观看一区| 久久资源免费视频| 精品无码一区二区三区的天堂| 国产盗摄视频一区二区三区| 日本不卡久久| 国产美女精品写真福利视频| 欧美喷潮久久久xxxxx| 亚洲最大免费视频| 欧美精品一线| 91精品国产综合久久香蕉的用户体验 | 奇米影视第四色777| 日本美女视频一区二区| 极品校花啪啪激情久久| 在线观看中文| 欧美日韩大陆在线| 中字幕一区二区三区乱码| 亚洲国产专区校园欧美| 亚洲自拍中文字幕| 在线观看av的网站| 在线看日本不卡| a视频免费观看| 精品9999| 成人在线免费网站| 免费av在线| 欧美日韩国产电影| 亚洲欧美va天堂人熟伦 | 亚洲国产视频a| 婷婷激情综合五月天| 欧美亚洲在线日韩| 国产成人精品一区二区| 天堂av在线免费观看| 一区二区国产盗摄色噜噜| 成年人三级黄色片| 欧美韩日一区| 国产欧美精品一区二区| 91高清在线| 欧美性生活影院| 亚洲第一综合网| 秋霞午夜av一区二区三区| 欧美一进一出视频| 欧美xxxx做受欧美护士| 亚洲色图第三页| 免费看一级视频| 久久精品视频免费观看| 日韩视频第二页| 欧美偷拍综合| 成人夜晚看av| 人人澡人人添人人爽一区二区| 欧美一区二区三区视频在线观看| 国产午夜手机精彩视频| 国产精品69毛片高清亚洲| 老司机午夜网站| aaa国产精品视频| 久久久噜噜噜久久| 亚洲色图另类小说| 色婷婷av一区二区| 5566中文字幕| 国产91精品在线观看| 霍思燕三级露全乳照| 日韩精品福利一区二区三区| 欧美怡春院一区二区三区| 成年人视频在线免费观看| 欧美日韩国产一级片| 国产十六处破外女视频| 成人蜜臀av电影| 免费观看成人网| 99精品在线观看| 国产aⅴ精品一区二区三区黄| 99thz桃花论族在线播放| 日韩精品在线免费播放| 在线免费观看视频网站| 夜夜嗨av一区二区三区中文字幕| 91视频在线免费| 日韩高清中文字幕一区| 欧美精品一区二区性色a+v| 成人看片黄a免费看视频| 日本高清久久天堂| 日本中文在线| 日韩免费电影网站| 亚洲av无码精品一区二区| 亚洲天堂a在线| 久久人人爽人人爽人人片| 老司机午夜精品| 久久这里只有精品23| 九九视频免费观看视频精品| 成人妇女免费播放久久久| 成人国产电影在线观看| 中文字幕一精品亚洲无线一区 | 中日韩精品视频在线观看| 国产拍揄自揄精品视频麻豆| 日韩欧美中文在线视频| 久久精品二区三区| 91国在线高清视频| 成人同人动漫免费观看| 国产精品加勒比| 未满十八勿进黄网站一区不卡| 久久免费视频网| aaa在线观看| 日韩av最新在线| www.五月婷婷| 欧美蜜桃一区二区三区| 成人午夜视频在线播放| 一区二区三区av电影 | 亚洲综合色噜噜狠狠| 在线观看亚洲大片短视频| 99久久久精品| 绯色av蜜臀vs少妇| 国产一区日韩二区欧美三区| 激情五月开心婷婷| 1024日韩| 99久久免费观看| 天天综合国产| 亚洲欧美日韩国产成人综合一二三区| 久久悠悠精品综合网| 春色成人在线视频| 国产一区二区| 成人妇女淫片aaaa视频| 日韩成人免费av| 国产精品免费一区二区三区都可以 | 日本午夜精品久久久| av成人午夜| 麻豆久久一区| 亚洲最大成人在线| 四虎精品在线观看| 国产欧美日韩专区发布| 电影亚洲一区| 国产精品久久久久久久久借妻| 天堂√中文最新版在线| 91国产视频在线| 77thz桃花论族在线观看| 久久99国产精品自在自在app| 黄色一级大片在线免费看产| 中文字幕亚洲情99在线| 一本一道波多野毛片中文在线| 亚洲午夜激情免费视频| 欧美美女搞黄| 亚洲人成人99网站| 国产黄色在线播放| 在线免费看av不卡| 在线日本视频| 欧美插天视频在线播放| 50度灰在线| 午夜精品福利在线观看| 高清视频在线观看三级| 97色在线视频观看| 最新日韩精品| 国产精品男人爽免费视频1| 国产成人免费精品| 91丝袜美腿美女视频网站| 日韩一区二区三区色| 99久久精品免费看国产四区| 天堂va在线高清一区| 国产精品一区二区三区观看| 久久a爱视频| 日本午夜精品电影| 水蜜桃久久夜色精品一区| 992tv成人免费观看| 黄色亚洲在线| 黄色免费福利视频| 日本女优在线视频一区二区 | 99视频有精品| 蜜桃久久精品成人无码av| 国产精品女同一区二区三区| 手机av在线看| 亚洲成av人片一区二区| 亚洲影院在线播放| 欧美日韩精品欧美日韩精品一综合| 亚洲综合免费视频| 精品国产一区二区精华| 免费国产在线观看| 久久久成人精品| free性欧美16hd| 国产精品极品美女在线观看免费 | 都市激情久久综合| 国产成人精品一区二区| 激情不卡一区二区三区视频在线| 国产精品视频免费一区| 欧美极品中文字幕| 国产香蕉一区二区三区| 久久午夜av| 九九九久久久久久久| 久久综合九色综合97_久久久| 久久久久99精品成人| 亚洲国产一区二区三区| 国产精品欧美综合| 精品国产免费久久| 日本亚洲精品| 91干在线观看| 国产在线不卡一区二区三区| 精品欧美日韩在线| 亚洲女同中文字幕| wwwxxx黄色片| 大美女一区二区三区| 色欲AV无码精品一区二区久久 | 日韩亚洲精品电影| 性孕妇free特大另类| 91精品视频免费观看| 国产在线观看91一区二区三区| a级网站在线观看| 日韩专区一卡二卡| 在线视频 日韩| 一区二区三区四区在线免费观看| chinese国产精品| 亚洲风情亚aⅴ在线发布| 黄网址在线观看| 国产国语videosex另类| 久久九九热re6这里有精品| 在线国产精品网| 日本vs亚洲vs韩国一区三区二区 | 1769国内精品视频在线播放| 91精品国产自产观看在线| 欧美综合激情| 国产农村妇女毛片精品久久莱园子| 久久精品无码一区二区三区毛片| 国产精品网站导航| 亚洲欧美日韩激情| 日韩国产一区三区| 欧美草逼视频| 97se亚洲综合在线| 91精品高清| 国产九九九视频| 日韩码欧中文字| 97精品人妻一区二区三区在线| 亚洲欧洲在线播放| 裤袜国产欧美精品一区| 久久久com| 亚洲欧美日韩视频二区| 黄色污在线观看| 香蕉久久一区二区不卡无毒影院| va视频在线观看| 欧美不卡视频一区发布| 精品一区二区三区中文字幕在线 | 久久成人综合网| 娇小11一12╳yⅹ╳毛片| 欧美性猛交xxxx黑人交| h网站在线免费观看| 国产精品丝袜高跟| 色综合蜜月久久综合网| 成年网站免费在线观看| 亚洲欧洲av在线| 国产视频第一页| 色综合导航网站| 狼人精品一区二区三区在线| 日韩精品一区二区在线视频| 成人精品一区二区三区中文字幕| 久久精品国产av一区二区三区| 日韩精品一区二区三区视频播放 | 中文无码久久精品| 国产精品偷伦视频免费观看了| 一区二区三区中文字幕电影| 亚洲av无码乱码国产麻豆 | 国产a级片免费看| 国产麻豆成人传媒免费观看| 全程偷拍露脸中年夫妇| 精品国产一区二区三区av性色| 欧美另类老肥妇| 日韩欧美国产二区| 精品一区二区三区欧美| 青娱乐国产在线视频| 亚洲韩国青草视频| 欧美粗大gay| 国产精品夜夜夜爽张柏芝| 国产成人综合视频| 亚洲黄色激情视频| 在线观看亚洲视频| 欧美成人精品一级| 欧美日韩二三区| 中文字幕电影一区| www.色呦呦| 国产xxx69麻豆国语对白| 99精品视频在线观看免费播放| 成人免费看片载| 色婷婷综合久久久中文一区二区| 日本亚洲精品| 久久99欧美| 国模娜娜一区二区三区| 免费一级特黄特色大片| 亚洲视频免费一区| 亚洲国产精品免费视频| 18禁男女爽爽爽午夜网站免费| 国产精品丝袜久久久久久app| www.狠狠干| 国产精国产精品| 激情视频一区| 91视频免费看片| 亚洲精品国产欧美| 欧洲一区在线| av丝袜天堂网| 性久久久久久久| 好吊日视频在线观看| 欧美日韩精品久久| 粉嫩av一区二区三区| 中日韩av在线|