淺挖《程式設計師的自我修養》的小問題

2021-06-27 06:45:33 字數 760 閱讀 3125

一、size中統計的text的大小與objdump中統計的一些大小不一致問題:

size(size.text ) == size( objdump.text + objdump.rodata + objdump.eh_frame)

二、.rodata段大小的計算方法

.rodata段存放的是常量。用c**寫一段程式,其中有些東西是被編譯器放到.rodata段的。

例如:

char* fmt = "12345678";

int main()

則字串常量"12345678"是放在.rodata段的。

通過objdump可以檢視object或elf檔案的段的分布

$ arm-linux-objdump -h main.o

這是乙個沒有被link的object檔案,所以vma/lma的位址都是0x00。第乙個字段表示段的大小。

.rodata的size = 0x0000000c,即12個位元組。"12345678"為什麼需要12位元組呢?因為字串的末尾

還有乙個null,所以共需9個位元組。編譯器把它對齊了一下,所以就用了12個位元組

三、eh_frame段(根絕文章和網友回答推測的)

eh是exception handing的縮寫

gcc處理異常時會生成eh_frame,可以推測eh_frame完全是依賴編譯器的實現。

eh_frame是dwarf除錯資訊的辯題。

eh_frame的結構和debug_frame非常相似,因此用處可能是:計算函式呼叫棧。

程式設計師的自我修養

一忌 輕易言敗,沒有自信 沒有永不放棄精神的程式設計師,只是乙個有程式設計師名號的假程式設計師。乙個真正的程式設計師,知道在程式設計的過程中,可能會遇到不計其數的困難和問題,可能有極多的挫折和失敗,而成功只有一次。就為解決乙個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。乙個問題解決了...

程式設計師的自我修養

一忌 輕易言敗,沒有自信 沒有永不放棄精神的程式設計師,只是乙個有程式設計師名號的假程式設計師。乙個真正的程式設計師,知道在程式設計的過程中,可能會遇到不計其數的困難和問題,可能有極多的挫折和失敗,而成功只有一次。就為解決乙個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。乙個問題解決了...

程式設計師的自我修養

對合作夥伴的尊重與包容 每個人的水平必然是不相同,大家各有擅長,並且在不斷進步中。所以遇到同事或者合作的友商犯了比較低階 對你來說可能是 的錯誤是很正常的事情,我們更多的是應該給與尊重與包容,而不是嘲笑或者消極對待。在不斷的鼓勵同事和合作夥伴之後,能感受到大家對我的信賴,特別是和友商的合作變得非常的...