8435|30

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教wince下的段地址怎么查看 [复制链接]

data.load.exe $REL\eboot.exe /nocode /reloc .text at 0x80039000 /reloc .data at 0x80021000
这里0x80039000表示eboot在运行时代码段的地址;0x80021000表示eboot运行时数据段的起始地址。
这两个地址从哪里来的呢?
通过什么工具或者什么文件可以看到这个地址?谢谢
此帖出自WindowsCE论坛

最新回复

定  详情 回复 发表于 2009-2-26 13:46
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不懂,up
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不懂,up
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
WINCE自身规定的,微软已经划分好相应的空间了。编译过程中固定好的。
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
可能在config.bib中设置的吧? (请高手指正)
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
关注一下
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
我顶
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用楼主 Seven_zhangxw 的帖子:
data.load.exe $REL\eboot.exe /nocode /reloc .text at 0x80039000 /reloc .data at 0x80021000
这里0x80039000表示eboot在运行时代码段的地址;0x80021000表示eboot运行时数据段的起始地址。
这两个地址从哪里来的呢?
通过什么工具或者什么文件可以看到这个地址?谢谢


你是说bin文件?
这个可以使用 viewbin XXX.bin即可看出一部分。

如果想要了解这个详细情况,使用dumpbin这个也可以得出一些信息
但是要得出重定位等信息,要使用一些破解工具才行。

你可以看看PE的文件格式,这个eeworld很多人上传了。
微软的bin文件格式类似EXE文件格式的。在MSDN有一些粗劣的描述,
我年前看了一下,对一些问题还是不了解。你了解透彻了给我留个言,哈哈。
刚回到广州,晕晕的。
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

9
 
在Make Image阶段,RomImage.exe做image时算出来的,你可以在release目录下makeimg.out中找到这些信息。
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 singlerace 的回复:
在Make Image阶段,RomImage.exe做image时算出来的,你可以在release目录下makeimg.out中找到这些信息。

老大,你很有经验啊,学习,学习......
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 singlerace 的回复:
在Make Image阶段,RomImage.exe做image时算出来的,你可以在release目录下makeimg.out中找到这些信息。


老大,eboot.exe不是需要makeimg就可以出来的吧?我的意思是这时候还没有makeimg.out呢,怎么看这个信息?
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 Seven_zhangxw 的回复:
引用 8 楼 singlerace 的回复:
在Make Image阶段,RomImage.exe做image时算出来的,你可以在release目录下makeimg.out中找到这些信息。


老大,eboot.exe不是需要makeimg就可以出来的吧?我的意思是这时候还没有makeimg.out呢,怎么看这个信息?

eboot也是romimage生成的,不过它没有log输出所以你看不到。你可以手工运行romimage。方法是,在PB中Build OS --> Open Release Directory进入命令行,假设你的bootloader在你的BSP的src\bootloader\eboot目录下,运行:
romimage %_TARGETPLATROOT%\src\bootloader\eboot\eboot.bib
成功的话,在输出信息里找吧。
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 singlerace 的回复:
eboot也是romimage生成的,不过它没有log输出所以你看不到。你可以手工运行romimage。方法是,在PB中Build OS --> Open Release Directory进入命令行,假设你的bootloader在你的BSP的src\bootloader\eboot目录下,运行:
romimage %_TARGETPLATROOT%\src\bootloader\eboot\eboot.bib
成功的话,在输出信息里找吧。


哇,太神奇了。。。真的找到了。这50分给你了。

我再加100分,希望还能获得别的问题的答案

1,stepldr,是不是同样的方法获得PDATA/DATA/TEXT段地址?我刚刚试验了,看上去是这样的,还是想确认下

2,NK下面的段地址是不是显示在makeimg.out里面,如下所示:
Module                 Section  Start     Length  psize   vsize   Filler
---------------------- -------- --------- ------- ------- ------- ------
nk.exe                 .text    80301000  430080  429056  428668 o32_rva=00001000
nk.exe                 .pdata   8036a000   12288    8704    8536 o32_rva=00093000
......
nk.exe                 .KDATA   8099dffc       0       0   24576 FILLER->82000000
nk.exe                 .data    807ef9d4    1536    1536  141868 FILLER->82006000

3,TEXT表示代码段,data表示数据段,那么pdata和kdata是什么?代码段好理解,data段到底存些什么内容?我刚才修改了TEXT段地址,跟踪代码就指向了错误位置;但随便怎么修改data段地址,都不影响trace的,为什么呢?

4,有关DLL的问题,在这里我们可以看到,比方说coredll.dll:
Module coredll.dll   at offset 01ffe000 data, 03f71000 code
coredll.dll            .text    8036d000  495616  492544  492329 o32_rva=00001000
coredll.dll            .rsrc    803e6000   28672   25600   25436 o32_rva=00082000
coredll.dll            .data    806c9a6c    1418    1418    4772 FILLER
coredll.dll            .pdata   80ffa000    9355    9355   20544
coredll.dll            E32      804d0f80     112                 FILLER
coredll.dll            O32      80ed0ce0      96                 FILLER

MODULES Section
Module                 Section  Start     Length  psize   vsize   Filler
---------------------- -------- --------- ------- ------- ------- ------
coredll.dll            FileName 805bcff0       12                 FILLER
这上面的text/data/pdata/rsrc看上去是地址,那么最上面的那个offset 01ffe000 data是什么呢?怎么加也加不到data这个地址上啊,怎么回事?最下面的filename地址又是什么?跟上面的好像都不一样,又是怎么回事情呢?还有这个rsrc是什么?跟nk的内容好像不一样了,真是奇怪

问题比较多,分数一次只能加100分,不够明天再加分。
再次感谢singlerace!
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 Seven_zhangxw 的回复:
3,TEXT表示代码段,data表示数据段,那么pdata和kdata是什么?代码段好理解,data段到底存些什么内容?我刚才修改了TEXT段地址,跟踪代码就指向了错误位置;但随便怎么修改data段地址,都不影响trace的,为什么呢?

data段是存放静态变量和全局变量的区域,这个在EXE和bin文件中有,从PB打包看来,这个bin文件包含了EXE,两者格式有点类似。对于烧写bin文件的系统,必须要有重定位(通俗的说法是拷贝静态变量和全局变量到RAM)静态变量和全局变量,我年前看过bootloader和kernel的代码,发现boot和kernel都有重定位的实现函数,在kernel中kdata用到,就是内核相关的存放静态变量和全局变量的区域,pdata我没有看到,楼主看明白了告诉我,在这里不敢妄言。其实有一个关于EXE文件格式的解释吧,在eeworld资源就有,讲得不错,什么重定位表等等都有,总之感觉人类的思想挺伟大的。


4,有关DLL的问题,在这里我们可以看到,比方说coredll.dll:
Module coredll.dll  at offset 01ffe000 data, 03f71000 code
coredll.dll            .text    8036d000  495616  492544  492329 o32_rva=00001000
coredll.dll            .rsrc    803e6000  28672  25600  25436 o32_rva=00082000
coredll.dll            .data    806c9a6c    1418    1418    4772 FILLER
coredll.dll            .pdata  80ffa000    9355    9355  20544
coredll.dll            E32      804d0f80    112                FILLER
coredll.dll            O32      80ed0ce0      96                FILLER

MODULES Section
Module                Section  Start    Length  psize  vsize  Filler
---------------------- -------- --------- ------- ------- ------- ------
coredll.dll            FileName 805bcff0      12                FILLER
这上面的text/data/pdata/rsrc看上去是地址,那么最上面的那个offset 01ffe000 data是什么呢?怎么加也加不到data这个地址上啊,怎么回事?最下面的filename地址又是什么?跟上面的好像都不一样,又是怎么回事情呢?还有这个rsrc是什么?跟nk的内容好像不一样了,真是奇怪

这个偏移 /offset 是有用的,偏移之前通常都是一种文件格式的标志,用来识别文件类型吧,偏移之后才是真正的文件数据相关的东西,我就知道这么多了,eboot有这个bin文件的解释代码,找来看看也能看出有什么猫腻。还有——《PE文件格式说明》也不错的
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

15
 
1,是
2,是
3,pdata是存储程序的异常信息的(exception table)。这些信息程序发生异常或者调试时会用到。不过X86架构是没有的这些信息的。kdata是自定义段,由D:\WINCE500\PRIVATE\WINCEOS\COREOS\NK\KERNEL\ARM\armtrap.s中这句话定义:
        AREA |.KDATA|,DATA,NOINIT
data段是放数据的,你设的不对不影响调试器解析代码,代码段设不对就不行了。
4,这个问题比较复杂,三两句话说不清楚。offset一般是指文件头到这段数据的偏移,或者record header到这段数据的偏移,应该是这两者中的一个,我没有仔细研究过是哪种。rsrc是资源数据段,比如说你用资源编辑器做了一个对话框,或者你有一个string table,这些都是资源,放在rsrc段里。
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

16
 
楼上说的太棒了。

在armtrap.s中定义了好多东西。以前我看都不知道干什么用的。
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

17
 
singlerace 说的很好

kdata是个数据段 存放的好像是KernelData

Module coredll.dll  at offset 01ffe000 data, 03f71000 code
表示的两个地址是coredll.dll的VA,01ffe000是数据段的VA在Slot0,03f71000是代码段的VA在Slot1
dll对应不同的进程有相同的地址空间,代码段在RAM里是唯一的,数据段对不同进程都会有一个拷贝,所以分开加载
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

18
 
singlerace 前辈 请指教
——————————————————————————————
看了makeimg.out,发现这个打包过程中写入的是虚拟地址信息
按照道理应该是物理信息才对啊。
以前我曾经也有这个疑惑,ADS写入的是物理地址的。
同样是开了MMU,差距挺大的。
并且,这个虚拟地址是直接和CPU联系在一起的。
CPU是通过地址重定位器和页表来完成访问外存的数据的,
这个bin文件是在内存运行的,它里面的地址信息是物理地址才对啊,
怎么搞的呢?弄成虚拟地址,大家来发发言啊。
请指教。
此帖出自WindowsCE论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 gooogleman 的回复:
singlerace 前辈 请指教
——————————————————————————————
看了makeimg.out,发现这个打包过程中写入的是虚拟地址信息
按照道理应该是物理信息才对啊。
以前我曾经也有这个疑惑,ADS写入的是物理地址的。
同样是开了MMU,差距挺大的。
并且,这个虚拟地址是直接和CPU联系在一起的。
CPU是通过地址重定位器和页表来完成访问外存的数据的,
这个bin文件是在内存运行的,它里面的地址信息是物理地址才对啊,
怎么搞的呢?弄成虚拟地址,大家来发发言啊。
请指教。


刚才搞晕了,其实ADS下也是虚拟地址的,只是ADS为了统一开MMU和关MMU的情况,把虚拟地址和物理地址映射成同一个地址。比较好维护。
在开MMU的情况下,这个bin文件写入的地址写入虚拟地址才是正确的。
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

20
 
mark
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表