在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

rt smart應(yīng)用程序調(diào)試記錄

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

本文是在qemu-virt64-aarch64下運(yùn)行smart-fetch的調(diào)試記錄

準(zhǔn)備

編譯

按照userapps的readme進(jìn)行編譯,編譯前鍵入如下命令,即可編譯出帶調(diào)試信息的userapps

xmake f --mode=debug

gdb配置

在調(diào)試過程中需要進(jìn)入內(nèi)核,所以需要同時(shí)加載內(nèi)核和應(yīng)用程序的elf符號表。設(shè)置.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程序,發(fā)現(xiàn)其entry point是0x200000的_start,于是在gdb中打斷點(diǎn)b *0x200000(或b _start),在輸入smart-fetch后成功暫停

1.jpg

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

調(diào)試記錄
以下按函數(shù)執(zhí)行的順序來進(jìn)行記錄

_start
該函數(shù)將當(dāng)前用戶態(tài)棧指針設(shè)置為0xffff80000000,為用戶空間較高的地址,之后跳到_start_c

_start_c

1.jpg

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

__libc_start_main

1.jpg

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

__init_libc

1.jpg

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

__init_tls

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

__init_ssp

該函數(shù)是初始化棧保護(hù)機(jī)制,但這里并未實(shí)現(xiàn)該機(jī)制。執(zhí)行dummy函數(shù),不做任何操作

libc_start_main_stage2

1.jpg

首先執(zhí)行__libc_start_init進(jìn)行初始化
之后調(diào)用main函數(shù)獲取返回值
之后調(diào)用exit(main_ret)來進(jìn)行清理

__libc_start_init

1.jpg

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

exit

1.jpg

__funcs_on_exit:無操作
__libc_exit_fini:該函數(shù)對應(yīng)于__libc_start_init,調(diào)用解構(gòu)函數(shù),注銷多線程克隆函數(shù),在這里也沒有實(shí)質(zhì)性的操作
_stdio_exit:關(guān)閉所有打開文件及標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤文件
_Exit:調(diào)用SYS_exit_group系統(tǒng)調(diào)用,之后就是操作系統(tǒng)進(jìn)行資源回收
缺頁異常處理
當(dāng)訪問一個(gè)不存在頁時(shí),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自動(dòng)做的事(通過對比缺頁觸發(fā)前后寄存器值得出):

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5421

    瀏覽量

    123328
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7636

    瀏覽量

    166407
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1370

    瀏覽量

    41510
  • GDB調(diào)試
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    1616
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用GDB調(diào)試Linux應(yīng)用程序

    本篇講解使用GDB調(diào)試Linux應(yīng)用程序,以下以 `hellowld.c` 為例介紹 GDB 的調(diào)試入門。
    發(fā)表于 06-27 15:48 ?563次閱讀

    RT-Thread Smart 入門指南

    、qemu 工具等。編譯應(yīng)用程序# 進(jìn)入到 rt-smart 目錄cd rt-smart# 設(shè)置對應(yīng)的環(huán)境變量,和原 RT-Thread 相比,多了 RTT_CC_PREFIX 環(huán)境變
    發(fā)表于 03-29 06:40

    RT-Smart的資料合集

    時(shí),需要使用 GDB 直接進(jìn)行代碼調(diào)試。本文檔記錄了以 RT-Thread qemu-vexpress-a9 BSP 為例,使用 GDB 對 RT-Smart 進(jìn)行代碼
    發(fā)表于 03-22 15:06

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

    應(yīng)用程序當(dāng)要編譯應(yīng)用程序時(shí),使用方式和 Linux 的類似:編譯 rt-smart 內(nèi)核編譯無誤后,會(huì)在當(dāng)前目錄下生成 kernel7.img 文件,這個(gè)是樹莓派上 32 位的版本。目前
    發(fā)表于 04-01 17:38

    分析一下在rt-smart操作系統(tǒng)中將一個(gè)應(yīng)用程序運(yùn)行起來要經(jīng)過哪些步驟

    1、RT-Smart ELF 應(yīng)用程序加載運(yùn)行在用戶態(tài)應(yīng)用程序處理的任務(wù)中,elf 加載運(yùn)行是一個(gè)比較重要的步驟,下面就分析一下在 rt-smart 操作系統(tǒng)中,想要將一個(gè)
    發(fā)表于 04-13 17:17

    請問RT -SMART支持GDB調(diào)試嗎?

    RT-SMART介紹,應(yīng)用程序開發(fā)可以用GDB在線調(diào)試?,F(xiàn)在發(fā)布的版本已經(jīng)具有還功能了嗎?原文摘錄:為了更好的支持應(yīng)用程序調(diào)試,在
    發(fā)表于 04-20 09:35

    rt-smart操作系統(tǒng)中將ELF應(yīng)用程序運(yùn)行起來要經(jīng)過哪些步驟

    1、RT-Smart ELF應(yīng)用程序加載運(yùn)行在用戶態(tài)應(yīng)用程序處理的任務(wù)中,elf 加載運(yùn)行是一個(gè)比較重要的步驟,下面就分析一下在 rt-smart 操作系統(tǒng)中,想要將一個(gè)
    發(fā)表于 06-13 18:18

    RT-Thread Smart快速上手

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

    rt-smart應(yīng)用程序系統(tǒng)調(diào)用實(shí)現(xiàn)過程是怎么樣的?

    rt-smart應(yīng)用程序系統(tǒng)調(diào)用實(shí)現(xiàn)過程是怎么樣的? 比如open時(shí)候怎么一步一步切換到內(nèi)核態(tài)的?
    發(fā)表于 09-08 17:00

    樹莓派上rt-smart的應(yīng)用編程入門

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

    如何在rt-smart簡化應(yīng)用程序開發(fā)

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

    RT-Smart ELF應(yīng)用程序加載運(yùn)行過程分析

    在用戶態(tài)應(yīng)用程序處理的任務(wù)中,elf 加載運(yùn)行是一個(gè)比較重要的步驟,下面就分析一下在 rt-smart 操作系統(tǒng)中,想要將一個(gè)應(yīng)用程序運(yùn)行起來要經(jīng)過哪些步驟。
    的頭像 發(fā)表于 11-02 09:57 ?1201次閱讀

    基于xmake的RT-Thread Smart用戶態(tài)開發(fā)教程

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

    帶有RT-Thread的Arduino應(yīng)用程序

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

    基于xmake的RT-Thread Smart用戶態(tài)開發(fā)教程

    RT-Thread Smart(以下簡稱 Smart) 是基于 RT-Thread 操作系統(tǒng)上的混合操作系統(tǒng),簡稱為 rt-smart,它把
    的頭像 發(fā)表于 09-14 11:48 ?1365次閱讀
    基于xmake的<b class='flag-5'>RT</b>-Thread <b class='flag-5'>Smart</b>用戶態(tài)開發(fā)教程
    主站蜘蛛池模板: 天天草天天操 | 黄网站在线观看永久免费 | 欧美无遮挡国产欧美另类 | 色婷婷影视 | 男人的午夜影院 | 国产美女特级嫩嫩嫩bbb | 久久精品94精品久久精品 | 大蕉久久伊人中文字幕 | 亚洲欧美7777| 艹逼视频免费看 | 天天天操天天天干 | 人人插人人费 | 免费爱爱小视频 | 日本高清视频成人网www | 成人看片在线观看 | 国产人人澡 | 日日噜噜夜夜狠狠tv视频免费 | 无人区理论片手机看片 | 午夜视频精品 | 久久夜夜操妹子 | 色激情综合 | 91久操| 六月天丁香婷婷 | 靠比久久 | 一区不卡视频 | 欧美日本一道免费一区三区 | 黄色毛片网 | 高hnp汁水bl总受软萌受 | 国产精品丝袜xxxxxxx | 欧洲国产精品精华液 | 真人午夜a一级毛片 | a久久久久一级毛片护士免费 | 免费不卡毛片 | 日本免费大黄 | 成人影院免费观看 | 久久久久国产精品免费免费不卡 | 黄色生活毛片 | 国产美女一级ba大片免色 | 天天操夜夜做 | 深爱激情五月网 | 中国业余老太性视频 |