色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

rt smart應用程序調試記錄

冬至子 ? 來源:zms123456 ? 作者:zms123456 ? 2023-09-13 16:29 ? 次閱讀

本文是在qemu-virt64-aarch64下運行smart-fetch的調試記錄

準備

編譯

按照userapps的readme進行編譯,編譯前鍵入如下命令,即可編譯出帶調試信息的userapps

xmake f --mode=debug

gdb配置

在調試過程中需要進入內核,所以需要同時加載內核和應用程序的elf符號表。設置.gdbinit文件如下:

target remote localhost:1234
file ../../../rt-thread/bsp/qemu-virt64-aarch64/rtthread.elf
add-symbol-file ../../apps/build/rootfs/bin/smart-fetch

首先使用readelf工具查看smart-fetch程序,發現其entry point是0x200000的_start,于是在gdb中打斷點b *0x200000(或b _start),在輸入smart-fetch后成功暫停

1.jpg

libc庫查看
本工程采用musl libc,可以自行下載查看源碼

調試記錄
以下按函數執行的順序來進行記錄

_start
該函數將當前用戶態棧指針設置為0xffff80000000,為用戶空間較高的地址,之后跳到_start_c

_start_c

1.jpg

所傳入的參數*p地址為smart預先設置的0xfffffffff000。這里存放了應用程序初始化所需的參數,由操作系統設置,最后調用傳參為__libc_start_main(main, 1, "/bin/smart-fetch",_init,_fini, 0 )

__libc_start_main

1.jpg

首先獲得程序的環境變量(操作系統設置,含有操作系統名稱,執行文件的信息等)
調用__init_libc(envp, "/bin/smart-fetch")
asm ( "" : "+r"(stage2) : : "memory" )表示保證在之后stage2采用更新后的值,避免使用緩存的值

__init_libc

1.jpg

該函數前面主要是通過envp來獲取一些程序信息如pagesize等,接下來執行__init_tls和__init_ssp

__init_tls

該函數目的是初始化線程局部存儲(thread local storage)。它需要根據elf文件的類型為PT_TLS的段來對線程局部存儲進行初始化。這里由于smart-fetch不是多線程程序,沒有PT_TLS類型的段,故該函數在這里沒有進行實際的操作。

__init_ssp

該函數是初始化棧保護機制,但這里并未實現該機制。執行dummy函數,不做任何操作

libc_start_main_stage2

1.jpg

首先執行__libc_start_init進行初始化
之后調用main函數獲取返回值
之后調用exit(main_ret)來進行清理

__libc_start_init

1.jpg

調用事先注冊好的初始化函數列表__init_array_start。
本處調用了frame_dummy函數,該函數并不是musl庫里的函數,而是gcc編譯時插入的函數。該函數調用初始化函數(即定義了__attribute__((constructor))的函數),并調用register_tm_clones來注冊多線程下的克隆函數。因為這個程序無初始化函數和多線程的特性,所以該函數實際上并未執行任何操作。

exit

1.jpg

__funcs_on_exit:無操作
__libc_exit_fini:該函數對應于__libc_start_init,調用解構函數,注銷多線程克隆函數,在這里也沒有實質性的操作
_stdio_exit:關閉所有打開文件及標準輸入、輸出、錯誤文件
_Exit:調用SYS_exit_group系統調用,之后就是操作系統進行資源回收
缺頁異常處理
當訪問一個不存在頁時,aarch改變的寄存器

sp 0xffff80000000 -> 0xffff0000002b6520
pc 0x20008 -> 0xffff0000000c6400
cpsr 0 -> 0x3c5
elr_el1 0x200000 -> 0x200008
sp_el0 0 -> 0xffff80000000
ESR_EL1 0-> 0x92000045
FAR_EL1 0 -> 0xffff7fffffd0

aarch64自動做的事(通過對比缺頁觸發前后寄存器值得出):

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120921
  • 存儲器
    +關注

    關注

    38

    文章

    7526

    瀏覽量

    164165
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40302
  • GDB調試
    +關注

    關注

    0

    文章

    24

    瀏覽量

    1471
收藏 人收藏

    評論

    相關推薦

    使用GDB調試Linux應用程序

    本篇講解使用GDB調試Linux應用程序,以下以 `hellowld.c` 為例介紹 GDB 的調試入門。
    發表于 06-27 15:48 ?478次閱讀

    RT-Thread Smart 入門指南

    、qemu 工具等。編譯應用程序# 進入到 rt-smart 目錄cd rt-smart# 設置對應的環境變量,和原 RT-Thread 相比,多了 RTT_CC_PREFIX 環境變
    發表于 03-29 06:40

    RT-Smart的資料合集

    時,需要使用 GDB 直接進行代碼調試。本文檔記錄了以 RT-Thread qemu-vexpress-a9 BSP 為例,使用 GDB 對 RT-Smart 進行代碼
    發表于 03-22 15:06

    快速上手RT-Thread Smart入門指南

    應用程序當要編譯應用程序時,使用方式和 Linux 的類似:編譯 rt-smart 內核編譯無誤后,會在當前目錄下生成 kernel7.img 文件,這個是樹莓派上 32 位的版本。目前
    發表于 04-01 17:38

    分析一下在rt-smart操作系統中將一個應用程序運行起來要經過哪些步驟

    1、RT-Smart ELF 應用程序加載運行在用戶態應用程序處理的任務中,elf 加載運行是一個比較重要的步驟,下面就分析一下在 rt-smart 操作系統中,想要將一個
    發表于 04-13 17:17

    請問RT -SMART支持GDB調試嗎?

    RT-SMART介紹,應用程序開發可以用GDB在線調試。現在發布的版本已經具有還功能了嗎?原文摘錄:為了更好的支持應用程序調試,在
    發表于 04-20 09:35

    rt-smart操作系統中將ELF應用程序運行起來要經過哪些步驟

    1、RT-Smart ELF應用程序加載運行在用戶態應用程序處理的任務中,elf 加載運行是一個比較重要的步驟,下面就分析一下在 rt-smart 操作系統中,想要將一個
    發表于 06-13 18:18

    RT-Thread Smart快速上手

    : done building targets.編譯應用程序rt-smart沒有開放用戶態程序依賴的第三方庫librtthread源碼,因此ARM926的處理器暫時無法使用用戶態APP。原作者:Yanye0xFF
    發表于 10-26 14:48

    rt-smart應用程序系統調用實現過程是怎么樣的?

    rt-smart應用程序系統調用實現過程是怎么樣的? 比如open時候怎么一步一步切換到內核態的?
    發表于 09-08 17:00

    樹莓派上rt-smart的應用編程入門

    文章,一些介紹及樹莓派上rt-smart的應用編程入門(更多的從應用程序角度入手)。后續還包括在rt-smart上的不同應用程序介紹: wget curl移植 busybox移植 sd
    的頭像 發表于 05-13 14:10 ?3210次閱讀
    樹莓派上<b class='flag-5'>rt-smart</b>的應用編程入門

    如何在rt-smart簡化應用程序開發

    RT-Thread Smart做為一個“新”的系統,在開發上相比原來的RT-Thread模式還是存在著挺大的不同。
    的頭像 發表于 01-04 15:59 ?2061次閱讀

    RT-Smart ELF應用程序加載運行過程分析

    在用戶態應用程序處理的任務中,elf 加載運行是一個比較重要的步驟,下面就分析一下在 rt-smart 操作系統中,想要將一個應用程序運行起來要經過哪些步驟。
    的頭像 發表于 11-02 09:57 ?990次閱讀

    基于xmake的RT-Thread Smart用戶態開發教程

    RT-Thread Smart(以下簡稱 Smart) 是基于 RT-Thread 操作系統上的混合操作系統,簡稱為 rt-smart,它把
    的頭像 發表于 06-07 11:44 ?1344次閱讀
    基于xmake的<b class='flag-5'>RT</b>-Thread <b class='flag-5'>Smart</b>用戶態開發教程

    帶有RT-Thread的Arduino應用程序

    電子發燒友網站提供《帶有RT-Thread的Arduino應用程序.zip》資料免費下載
    發表于 06-14 11:22 ?6次下載
    帶有<b class='flag-5'>RT</b>-Thread的Arduino<b class='flag-5'>應用程序</b>

    基于xmake的RT-Thread Smart用戶態開發教程

    RT-Thread Smart(以下簡稱 Smart) 是基于 RT-Thread 操作系統上的混合操作系統,簡稱為 rt-smart,它把
    的頭像 發表于 09-14 11:48 ?1176次閱讀
    基于xmake的<b class='flag-5'>RT</b>-Thread <b class='flag-5'>Smart</b>用戶態開發教程
    主站蜘蛛池模板: 久久精品视频在线看15| 美女脱内衣裸身尿口露出来| 毛片免费观看的视频在线| 亚洲伊人久久综合影院2021| 国产中文字幕乱码一区| 无码一区二区在线欧洲| 国产精品久久久久久AV免费不卡| 日日撸影院在线| 国产成年网站v片在线观看| 日韩1区1区产品乱码芒果榴莲| 俄罗斯XXXXXL18| 神马电影我不卡国语版| 国产精品无码AV天天爽色欲| 性色少妇AV蜜臀人妻无码| 国产在线精品视频免费观看| 亚洲深夜在线| 久久亚洲AV无码精品午色夜麻豆 | 亚洲欧美日韩在线观看一区二区三区 | 精品国产在线观看福利| 在线观看免费小视频| 男女又黄又刺激B片免费网站| av老司机色爱区综合| 沙发上小泬12P| 国内精品视频一区二区在线观看 | 国产不卡免费| 亚洲免费成人| 蜜桃成熟时2电影免费观看d| 俄罗斯大肥BBXX| 亚洲欧美成人在线| 男女做爽爽爽视频免费软件| 高清mv视频免费观看| 亚洲午夜精品久久久久久抢| 男男肉肉互插腐文| 国产AV亚洲国产AV麻豆| 亚洲无AV在线中文字幕| 免费在线亚洲视频| 国产成人精品免费视频大全办公室 | 青青娱乐网| 精品国产成a人在线观看| 99精品亚洲| 亚洲、国产综合视频|