亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

使用qemu和busybox搭建Linux內核調試環境

2025-05-07 08:56:04
20
0

一、編譯qemu

(1) 獲取qemu源碼
從qemu官網獲取源碼tar包即可,下面以5.2.0的源碼為例。

(2)解壓源碼
xz -d qemu-5.2.0.tar.xz
tar -xf qemu-5.2.0.tar

(3)進入qemu源碼目錄
cd qemu-5.2.0

(4)配置編譯選項
    (x86架構)./configure --target-list=x86_64-softmmu --enable-debug --extra-ldflags='-ldl -Wl,-E'
    (arm架構)./configure --target-list=aarch64-softmmu --enable-debug --extra-ldflags='-ldl -Wl,-E' --enable-kvm --enable-virtfs

(5)開始編譯
make -j
編譯產物在build目錄下。

 

二、使用busybox構建文件系統

(1) 獲取源碼
     從busybox官網獲取最新源碼,下面以 1.36.1 版本為例。

(2)  解壓后進入源碼根目錄執行以下命令
      tar -xf busybox-1.36.1.tar.bz2 && cd busybox-1.36.1
      make menuconfig (具體配置參考【busybox配置】)
      make
      make install

(3) 在 _install 目錄下添加以下文件
    etc/init.d/rcS
    etc/fstab
    etc/inittab
    其中 etc/init.d/rcS 的內容如下:
#!/bin/sh
/bin/mount -a
/sbin/mdev -s
    etc/fstab 的內容如下:
proc /proc proc nodev 0 0
sysfs /sys sysfs nodev 0 0
debugfs /sys/kernel/debug debugfs nodev 0 0
    tc/inittab 的內容如下:
::sysinit:/etc/init.d/rcS
console::respawn:-/bin/sh

(4) 在 _install 目錄下創建必要的目錄
    mkdir proc sys tmp

(5) 在 _install 目錄下打包 initramfs 文件系統
    find . | cpio -o -H newc | gzip -9 > ../initramfs_simple.gz

【busybox配置】
(1) 靜態鏈接
     進入 Settings ,選擇 Build static binary (no shared libs),即

(2) 指定自定義的庫路徑
     進入 Settings -> Additional LDFLAGS
     在文本框內輸入庫路徑,例如自己編譯的 glibc 庫
     -B /home/ctyun/.local/lib

 

三、使用qemu 啟動內核

以 x86 架構為例,把待調試的內核 vmlinuz-5.10.0-136.12.0.90.ctl3.x86_64 和文件系統 initramfs_simple.gz 傳給 qemu,具體啟動內核的命令如下:

./qemu-system-x86_64                                   \
    -M pc  -nographic                                  \
    -L ./pc-bios -gdb tcp::1234 -smp 1 -m 2048         \
    -append " console=tty0 console=ttyS0 nokaslr "     \
    -initrd initramfs_simple.gz                        \
    -kernel vmlinuz-5.10.0-136.12.0.90.ctl3.x86_64

此后qemu 的 gdbserver 就會監聽 1234 端口,隨時等待調試客戶端接入。

 

四、常用的調試方法

【調試內核】

(1) 向 gdb 傳入 kernel-debuginfo 包里的 vmlinux 符號:
    gdb /path/vmlinux
(2) 連接到arm服務器。假設IP是x.x.x.x,由于端口已確定為1234,則可執行以下命令:
     target remote x.x.x.x:1234
(3) 在內核啟動處加斷點
     hbreak start_kernel
(4) 繼續啟動內核:輸入 c 并回車
后續操作基本上與 gdb 調試用戶態程序的方法一致。

 

【調試內核ko模塊】

在insmod xxxx.ko 后想調試這個ko的運行代碼,那么可以按以下方法進行。

1)查看ko的各section的 addr
   有2種方法.
   1)方法1:在gdb里打印各section的 addr
   以act_ct.ko為例。
   首先用readelf -S命令查看act_ct.ko的.text .data .bss的索引,
   假設查到的是1、27、33,
   然后在do_init_module打斷點,斷住后執行以下命令:
   p /x  mod->sect_attrs->attrs[1]->address
   p /x  mod->sect_attrs->attrs[15]->address
   p /x  mod->sect_attrs->attrs[18]->address

   注:不同ko的.data .bss在attrs里的索引可能不同,可通過如下命令逐一確認:
   p mod->sect_attrs->attrs[x]->name
   2)方法2:i在OS的shell里通過sysfs文件來查看
   假設要看act_ct.ko的.text .data .bss段的 addr,那么依次執行以下命令:
   cat /sys/module/act_ct/sections/.text
   cat /sys/module/act_ct/sections/.data
   cat /sys/module/act_ct/sections/.bss

(2) 添加 ko符號
   利用上一步查到的 addr,執行以下命令:
   add-symbol-file act_ct.ko [text addr] -s .data [data addr] -s .bss [bss addr]
   這樣就可以添加斷點調試了。

 

 

 

 

 

0條評論
0 / 1000
彭乾恒
4文章數
1粉絲數
彭乾恒
4 文章 | 1 粉絲
彭乾恒
4文章數
1粉絲數
彭乾恒
4 文章 | 1 粉絲
原創

使用qemu和busybox搭建Linux內核調試環境

2025-05-07 08:56:04
20
0

一、編譯qemu

(1) 獲取qemu源碼
從qemu官網獲取源碼tar包即可,下面以5.2.0的源碼為例。

(2)解壓源碼
xz -d qemu-5.2.0.tar.xz
tar -xf qemu-5.2.0.tar

(3)進入qemu源碼目錄
cd qemu-5.2.0

(4)配置編譯選項
    (x86架構)./configure --target-list=x86_64-softmmu --enable-debug --extra-ldflags='-ldl -Wl,-E'
    (arm架構)./configure --target-list=aarch64-softmmu --enable-debug --extra-ldflags='-ldl -Wl,-E' --enable-kvm --enable-virtfs

(5)開始編譯
make -j
編譯產物在build目錄下。

 

二、使用busybox構建文件系統

(1) 獲取源碼
     從busybox官網獲取最新源碼,下面以 1.36.1 版本為例。

(2)  解壓后進入源碼根目錄執行以下命令
      tar -xf busybox-1.36.1.tar.bz2 && cd busybox-1.36.1
      make menuconfig (具體配置參考【busybox配置】)
      make
      make install

(3) 在 _install 目錄下添加以下文件
    etc/init.d/rcS
    etc/fstab
    etc/inittab
    其中 etc/init.d/rcS 的內容如下:
#!/bin/sh
/bin/mount -a
/sbin/mdev -s
    etc/fstab 的內容如下:
proc /proc proc nodev 0 0
sysfs /sys sysfs nodev 0 0
debugfs /sys/kernel/debug debugfs nodev 0 0
    tc/inittab 的內容如下:
::sysinit:/etc/init.d/rcS
console::respawn:-/bin/sh

(4) 在 _install 目錄下創建必要的目錄
    mkdir proc sys tmp

(5) 在 _install 目錄下打包 initramfs 文件系統
    find . | cpio -o -H newc | gzip -9 > ../initramfs_simple.gz

【busybox配置】
(1) 靜態鏈接
     進入 Settings ,選擇 Build static binary (no shared libs),即

(2) 指定自定義的庫路徑
     進入 Settings -> Additional LDFLAGS
     在文本框內輸入庫路徑,例如自己編譯的 glibc 庫
     -B /home/ctyun/.local/lib

 

三、使用qemu 啟動內核

以 x86 架構為例,把待調試的內核 vmlinuz-5.10.0-136.12.0.90.ctl3.x86_64 和文件系統 initramfs_simple.gz 傳給 qemu,具體啟動內核的命令如下:

./qemu-system-x86_64                                   \
    -M pc  -nographic                                  \
    -L ./pc-bios -gdb tcp::1234 -smp 1 -m 2048         \
    -append " console=tty0 console=ttyS0 nokaslr "     \
    -initrd initramfs_simple.gz                        \
    -kernel vmlinuz-5.10.0-136.12.0.90.ctl3.x86_64

此后qemu 的 gdbserver 就會監聽 1234 端口,隨時等待調試客戶端接入。

 

四、常用的調試方法

【調試內核】

(1) 向 gdb 傳入 kernel-debuginfo 包里的 vmlinux 符號:
    gdb /path/vmlinux
(2) 連接到arm服務器。假設IP是x.x.x.x,由于端口已確定為1234,則可執行以下命令:
     target remote x.x.x.x:1234
(3) 在內核啟動處加斷點
     hbreak start_kernel
(4) 繼續啟動內核:輸入 c 并回車
后續操作基本上與 gdb 調試用戶態程序的方法一致。

 

【調試內核ko模塊】

在insmod xxxx.ko 后想調試這個ko的運行代碼,那么可以按以下方法進行。

1)查看ko的各section的 addr
   有2種方法.
   1)方法1:在gdb里打印各section的 addr
   以act_ct.ko為例。
   首先用readelf -S命令查看act_ct.ko的.text .data .bss的索引,
   假設查到的是1、27、33,
   然后在do_init_module打斷點,斷住后執行以下命令:
   p /x  mod->sect_attrs->attrs[1]->address
   p /x  mod->sect_attrs->attrs[15]->address
   p /x  mod->sect_attrs->attrs[18]->address

   注:不同ko的.data .bss在attrs里的索引可能不同,可通過如下命令逐一確認:
   p mod->sect_attrs->attrs[x]->name
   2)方法2:i在OS的shell里通過sysfs文件來查看
   假設要看act_ct.ko的.text .data .bss段的 addr,那么依次執行以下命令:
   cat /sys/module/act_ct/sections/.text
   cat /sys/module/act_ct/sections/.data
   cat /sys/module/act_ct/sections/.bss

(2) 添加 ko符號
   利用上一步查到的 addr,執行以下命令:
   add-symbol-file act_ct.ko [text addr] -s .data [data addr] -s .bss [bss addr]
   這樣就可以添加斷點調試了。

 

 

 

 

 

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0