当前位置: 代码迷 >> WinCE >> 请问wince下的段地址如何查看
  详细解决方案

请问wince下的段地址如何查看

热度:189   发布时间:2016-04-28 13:42:42.0
请教wince下的段地址怎么查看
data.load.exe $REL\eboot.exe /nocode /reloc .text at 0x80039000 /reloc .data at 0x80021000
这里0x80039000表示eboot在运行时代码段的地址;0x80021000表示eboot运行时数据段的起始地址。
这两个地址从哪里来的呢?
通过什么工具或者什么文件可以看到这个地址?谢谢

------解决方案--------------------
不懂,up
------解决方案--------------------
不懂,up
------解决方案--------------------
WINCE自身规定的,微软已经划分好相应的空间了。编译过程中固定好的。

------解决方案--------------------
可能在config.bib中设置的吧? (请高手指正)
------解决方案--------------------
关注一下
------解决方案--------------------
引用楼主 Seven_zhangxw 的帖子:
data.load.exe $REL\eboot.exe /nocode /reloc .text at 0x80039000 /reloc .data at 0x80021000
这里0x80039000表示eboot在运行时代码段的地址;0x80021000表示eboot运行时数据段的起始地址。
这两个地址从哪里来的呢?
通过什么工具或者什么文件可以看到这个地址?谢谢

------解决方案--------------------
探讨
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文件格式的解释吧,在CSDN资源就有,讲得不错,什么重定位表等等都有,总之感觉人类的思想挺伟大的。

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文件格式说明》也不错的

------解决方案--------------------
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段里。
------解决方案--------------------
楼上说的太棒了。

在armtrap.s中定义了好多东西。以前我看都不知道干什么用的。
------解决方案--------------------
singlerace 说的很好

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

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