關於鏈結檔案和hex檔案的一些小總結

2021-09-23 14:00:12 字數 1028 閱讀 8999

在除錯某晶元平台時,希望將flash上的一片地方採用絕對位址定位定乙個陣列。於是修改了鏈結檔案,當時的鏈結檔案如下:

memory

>eflash

.rodata : >eflash

.text   :        >eflash = 0xbebe

.gjtest 0x408000: >jtest

.data : at(_end_text)

>ram

.bss : >ram

}

test.c檔案如下:

attribute((section (".gjtest ")))

void aaatest(void)

編譯完以後,看map檔案發現已經將函式 aaatest 定位到了0x408000這個位址,在主函式中呼叫 aaatest 的時候,採用函式指標指向絕對位址,然後呼叫的方式,發現每次呼叫總會引起晶元異常復位。檢視編譯出來的hex檔案發現 0x408000 這個位址上面沒有資料。這種情況是map中顯示已經將檔案進行了絕對位址定位,但是hex檔案中並沒有相應的資料。後來修改鏈結檔案如下:

memory

>eflash

.rodata : >eflash

.gjtest 0x408000:   >jtest

.text : >eflash = 0xbebe

.gjtest 0x408000: >jtest

.data : at(_end_text)

>ram

.bss : >ram

問題的原因是在.text這個段中要將所有的**段鏈結到那兒去,如果將需要特殊處理的段 .gjtest 放在 .text 段後面,在 .text 段中已經將所有的東西放在了那兒,後面再有 .gjtest 的時候 鏈結器發現已經鏈結了測試函式,就不再對測試函式進行鏈結了,解決這個問題只能將需要特殊處理的段放在 .text 之前。

關於檔案的一些操作

今天遇到一些關於檔案的知識點 codeblocks16.0裡面不支援 include只有 include使用時要把std包包含在裡面 using namespace std 而vc6.0卻不能使用這個包 下面是課件上的一些知識點,以後用到的時候再拿出來看看吧 include void main in...

關於Hex檔案的解析和修改應用

目錄前言 一 hex是什麼?二 使用步驟 1.引入hexlexer類 2.呼叫類 最近研究了一下hex檔案的用法。主要用途是配合stvp進行量產工具的開發應用。因為涉及到常量的修改不想編譯和修改或者應用再無法修改原始檔案的地方 可以通過提前記錄對應的常量偏移來進行修改。需求 修改指定偏移位置的hex...

關於hosts檔案的一些事

hosts是乙個沒有副檔名的系統檔案,可以用記事本等工具開啟。就是將一些常用的 網域名稱與其對應的ip位址建立乙個關聯 資料庫 當使用者在瀏覽器中輸入乙個需要登入的 時,系統會首先加快網域名稱解析 對於要經常訪問的 我們可以通過在hosts中配置網域名稱和ip的對映關係,提高網域名稱解析速度。由於有...