国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品
電子工程網(wǎng)
標(biāo)題:
arm-linux-gcc編譯的結(jié)果,反匯編出來的入口為什么不正確?
[打印本頁]
作者:
lelee007
時(shí)間:
2009-6-19 01:56
標(biāo)題:
arm-linux-gcc編譯的結(jié)果,反匯編出來的入口為什么不正確?
.extern main
.text
.global _start
@ 0x00: 系統(tǒng)入口,此處放置一條跳轉(zhuǎn)語句,跳過中斷向量表,至于中斷向量表,實(shí)際是最后被copy到SDRAM的高端地址,通過MMU來處理進(jìn)入
_start:
@-------->這里定義的入口處
b
real_start
@-------->這里是跳過reset,但是reset實(shí)際是存在的,但不是程序真正的開始
@ 0x04: 中斷向量表并非從0地址開始放置,因?yàn)槲覀兪褂玫闹苯覵DRAM調(diào)試時(shí),中斷入口是需要通過MMU來映射的
Reset:
b Reset @直接在SDRAM中調(diào)試的話,實(shí)際是不使用Reset的,因此一Reset,硬件系統(tǒng)將從nand flash中讀取uboot來執(zhí)行,所以此處實(shí)際是個(gè)空語句處理
@ 0x08: Undefined instruction exception
HandleUndef:
b HandleUndef
@ 0x0c: Software interrupt exception
HandleSWI:
b HandleSWI
@ 0x10: Prefetch Abort (Instruction Fetch Memory Abort)
HandlePrefetchAbort:
b HandlePrefetchAbort
@ 0x14: Data Access Memory Abort
HandleDataAbort:
b HandleDataAbort
@ 0x18: Not used
HandleNotUsed:
b HandleNotUsed
@ 0x1c: IRQ(Interrupt Request) exception
ldr pc,HandleIRQAddr
@ 0x20: FIQ(Fast Interrupt Request) exception
HandleFIQ:
b HandleFIQ
HandleIRQAddr:
.long HandleIRQ
real_start
:
@here,跳過系統(tǒng)上電后從0地址出的中斷向量表開始執(zhí)行,這是為了不用燒寫FLASH來進(jìn)行調(diào)試
@here,此處應(yīng)該先將系統(tǒng)設(shè)置為上電時(shí)系統(tǒng)的默認(rèn)模式,因?yàn)榇藭r(shí)系統(tǒng)尚運(yùn)行于uboot的環(huán)境
ldr sp, =0x30100000 @設(shè)置運(yùn)行于SDRAM時(shí)的堆棧
bl disable_watch_dog @關(guān)閉看門狗
bl clock_init @初始化時(shí)鐘,啟動PLL,F(xiàn)CLK=200MHz,HCLK=100MHz,PCLK=50MHz
bl memsetup_2 @設(shè)置SDRAM
@ bl init_nand @SDARM調(diào)試,不使用nand flash,所以不用初始化nand 控制器
bl copy_vectors_to_high @此處使用lelee自己的代碼,將0x3000 0004地址開始的中斷向量表copy到SDRAM的高端去
-----------------------------------------------------------
以上為head.s的開頭處
00000000 <.data>:
0: e1a0c00d mov ip, sp
4: e92dd800 stmdb sp!, {fp, ip, lr, pc}
8: e24cb004 sub fp, ip, #4 ; 0x4
c: e3a02313 mov r2, #1275068416 ; 0x4c000000
10: e3e034ff mvn r3, #-16777216 ; 0xff000000
14: e5823000 str r3, [r2]
18: e3a03313 mov r3, #1275068416 ; 0x4c000000
1c: e2833014 add r3, r3, #20 ; 0x14
20: e3a02003 mov r2, #3 ; 0x3
24: e5832000 str r2, [r3]
28: ee111f10 mrc 15, 0, r1, cr1, cr0, {0}
2c: e3811103 orr r1, r1, #-1073741824 ; 0xc0000000
30: ee011f10 mcr 15, 0, r1, cr1, cr0, {0}
34: e3a02313 mov r2, #1275068416 ; 0x4c000000
38: e2822004 add r2, r2, #4 ; 0x4
3c: e3a03917 mov r3, #376832 ; 0x5c000
40: e2833040 add r3, r3, #64 ; 0x40
44: e5823000 str r3, [r2]
48: e89da800 ldmia sp, {fp, sp, pc}
4c: 43434700 cmpmi r3, #0 ; 0x0
50: 4728203a undefined
54: 2029554e eorcs r5, r9, lr, asr #10
58: 2e342e33 mrccs 14, 1, r2, cr4, cr3, {1}
5c: 00000031 andeq r0, r0, r1, lsr r0
60: eafffffe b 0x60
@---->這里是中斷入口了
64: eafffffe b 0x64
68: eafffffe b 0x68
6c: eafffffe b 0x6c
70: eafffffe b 0x70
74: eafffffe b 0x74
78: e59ff000 ldr pc, [pc, #0] ; 0x80
7c: eafffffe b 0x7c
80: 300040c4 andcc r4, r0, r4, asr #1
84: e59fd04c ldr sp, [pc, #76] ; 0xd8
-----------------------------------------------
很納悶,不知道為什么突然邊成這樣了,之前都還是好好的,反匯編的開始處是中斷入口
誰給個(gè)答案?小弟謝謝了
作者:
阿南
時(shí)間:
2009-6-19 13:22
呵呵,沒怎么理解清楚樓主的問題
0x18應(yīng)該為IRQ的入口吧怎么會是:
@ 0x18: Not used
HandleNotUsed:
b HandleNotUsed
作者:
huangqi412
時(shí)間:
2009-6-19 13:30
傳說中的一式三招,ls...
作者:
huangqi412
時(shí)間:
2009-6-19 13:30
傳說中的一式三招,ls...
作者:
lelee007
時(shí)間:
2009-6-19 18:39
南哥,我在連接的時(shí)候,直接把程序全放在0x30004000處了,直接通過uboot下載到SDRAM中去跑,而不是每次都燒寫nand,所以在程序的最開始處,相當(dāng)于中斷向量表中的Reset的位置放置了一條跳轉(zhuǎn)指令b real_start 來跳過reset,而真正的中斷向量表是往后推了4個(gè)字節(jié)來,所以那個(gè)保留的未使用的存放地址就到了0x18了,我的程序里邊用了段代碼將b real_start后邊的7個(gè)word空間的向量表copy到SDRAM的高地址去了(這樣應(yīng)該是可以進(jìn)中斷的吧?中斷的進(jìn)入只與pc的值和存放位置有關(guān),與編譯連接應(yīng)該沒什么關(guān)系吧?)
我的問題是,為什么編譯的結(jié)果,0地址的b real_start和緊接著的中斷向量表不在最開始處,而是跑到了“60: eafffffe b 0x60 @---->這里是中斷入口了”這里來了?
昨天改程序,改來改去,編譯結(jié)果還是這樣,反匯編出來的代碼就是一樓里貼的,而且下載到SDRAM里了,根本不跑
作者:
lelee007
時(shí)間:
2009-6-19 18:45
本來弄了個(gè)簡單的,不開中斷的 程序,在main()里邊的while(1)中用led的交替亮滅來測試,是正常的(就是連接直接指明程序從30004000處開始運(yùn)行,編譯結(jié)果用uboot下載到30004000處,然后go 30004000,是可以正常跑的。MMU也開了,64M的SDRAM的地址空間,除了33f0 0000映射到ffff 0000處(33f0 0000開始存放中斷向量表),其他地址都是映射為本身,寄存器也一頁映射為本身地址)
但是加了timer0后,編譯的結(jié)果就成這樣了,莫名其妙
作者:
阿南
時(shí)間:
2009-6-22 09:05
其實(shí)問題沒有考慮太多.但是有一點(diǎn)必需清楚的認(rèn)識到,CPU復(fù)位之后PC指向0x0地址,產(chǎn)生IRQ時(shí)PC指向0x18,這是三星ARM處理器的鐵的實(shí)事.就是俺是中國人一樣永遠(yuǎn)是改變不了的事實(shí)!
作者:
阿南
時(shí)間:
2009-6-22 09:06
其實(shí)問題沒有考慮太多.但是有一點(diǎn)必需清楚的認(rèn)識到,CPU復(fù)位之后PC指向0x0地址,產(chǎn)生IRQ時(shí)PC指向0x18,這是三星ARM處理器的鐵的實(shí)事.就是俺是中國人一樣永遠(yuǎn)是改變不了的事實(shí)!
作者:
lelee007
時(shí)間:
2009-6-24 22:53
2410中斷入口有兩中擺放方式嘛,低端和高端
如果放高端的話,復(fù)位后PC指向FFFF0000吧
IRQ來的時(shí)候就指向FFFF0018了吧
作者:
xiaofenger.tan
時(shí)間:
2011-1-14 10:12
居然有人這種問題都沒有搞懂
作者:
xiaofenger.tan
時(shí)間:
2011-1-14 10:12
0x18就是未用嘛
作者:
lelee007
時(shí)間:
2011-1-14 12:04
LS弄明白到底時(shí)什么問題了么?!:-)
討論的是反匯編的結(jié)果不正確,正常反匯編出來的結(jié)果不是這樣
至于0X18用沒用,壓根沒提到過,并且是把程序入口重新映射了,并且用鏈接腳本處理過
弄明白了再跟貼
歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/)
Powered by Discuz! X3.4
主站蜘蛛池模板:
免费色网站
|
国产高清一区二区
|
欧美另类在线观看
|
欧美va在线播放免费观看
|
2019偷偷狠狠的日日
|
草莓香蕉绿巨人丝瓜榴莲18
|
国产黄在线免费观看
|
国产免费播放一区二区三区
|
国产精品国产亚洲精品看不卡
|
91探花福利精品国产自产在线
|
久久噜噜久久久精品66
|
欧美精品手机在线
|
国产精品三级国语在线看
|
伊人草草
|
免费精品99久久国产综合精品
|
欧美日本一二三区
|
老司机在线精品视频
|
国产成人精品亚洲
|
污污视频网站免费在线观看
|
欧美日本高清视频在线观看
|
麻豆精品在线播放
|
色老二精品视频在线观看
|
99热国产这里只有精品免费
|
99热精品在线免费观看
|
在线观看精品一区
|
艹久久
|
午夜精品久久久久
|
最新91视频
|
欧美成视频在线观看
|
wwwxx在线观看
|
日本在线观看免费高清
|
日韩精品网站
|
狠狠色丁香婷婷综合激情
|
四虎影视国产884a精品亚洲
|
91中文字幕视频
|
欧美日韩高清观看一区二区
|
青青操网
|
国产91精品久久久久久
|
七月婷婷在线网址
|
日本 在线播放
|
欧美一区二区aa大片
|