能力值:
( LV2,RANK:10 )
|
-
-
2 楼
还有,如果用SizeOfRawData字段可以,那用VirtualSize字段行不行呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=lkdsgrjra;633913]当节映射到内存中后大小已经变了啊,怎么还能用在磁盘文件中的大小计算结束RVA?QUOTE]
映射后的大小是不会变化的
|
能力值:
( LV9,RANK:170 )
|
-
-
4 楼
自己写一个程序...再用winhex看一下不就知道了..
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
对齐方式不一样,大小不就变了吗?如果没变,那用VirtualSiz也可以咯?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
竟然没人回,自己顶下
|
能力值:
( LV6,RANK:90 )
|
-
-
7 楼
定位PE文件中资源在磁盘文件位置
SizeOfRawData字段是节在磁盘中所占字节大小
节在内存中的RVA加上SizeOfRawData得到节的结束RVA
好好读这几句
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
[QUOTE=hfyy;635591]定位PE文件中资源在磁盘文件位置
SizeOfRawData字段是节在磁盘中所占字节大小
节在内存中的RVA加上SizeOfRawData得到节的结束RVA
好好读这几句[/QUOTE]
能说明白点吗?
磁盘文件映射到内存,对齐方式改变。如果用SizeOfRawData行,用节的原始大小(没对齐时节的大小,即VirtualSize字段)计算行不?
请说清楚点~谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
好像对齐不对齐是不会影响节的大小的吧,只是影响该节的开始地址
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
对齐方式不一样,大小不就变了啊
有没有人能解释下我上面问的问题?解惑~~
|
能力值:
( LV3,RANK:20 )
|
-
-
11 楼
virualsize是整个节真正的大小,pointertorawdata是pe文件在磁盘上的定位,而pe文件的节在磁盘上的大小是sizeofrawdata(这个值也就是virtualsize通过文件对齐粒度对其后的大小)。当pe文件加载到内存时,pe文件中的节加载到virtualadress这个地址(如果没有进行重定位的话)。一般来说上一个节地址加上这个节的大小通过sectionalign对齐后的大小后得到的地址就是下一个节的开始地址,但是这不并不是pe文件的标准,只是编译器通常这样做;
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
我们通常定位资源用的是看目标地址在不在virtualsize和加上SizeOfRawdata后的地址中,如果把sizeofraw换成virtualsize行不?
|
能力值:
( LV4,RANK:40 )
|
-
-
13 楼
当节映射到内存中后大小已经变了啊,怎么还能用在磁盘文件中的大小计算结束RVA?
不是计算节结束的RVA,是计算节中的数据结束的RAV 其实LZ的方法和书上的是一会事。
现在只有数据的RVA要得到RAW。
2者相同的只有数据相对于节头的偏移地址。
所以首先要找到数据A在哪个节里。书上的既审核了节的开始位置,也审核了节数据的结束位置。来确定数据的位置,楼主只用相邻节头来确定数据的位置。
楼主的方法更简单。
因为数据不可能在图中浅色的位置,因为那些地方都是内存的随机数据。没有意义。文件中根本不存在,也就不可能有RAW
书上的更严谨一点。
因为有可能数据出错真的求了一个在浅色位置的数据。书上的代码可以提示错误,告诉用户数据错误。用楼主的方法就找到了下一个节一个其他数据。
明白没?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
我理解你的意思。照这样说用VIRTUALSIZE也可以啊
|
能力值:
( LV4,RANK:40 )
|
-
-
15 楼
可以。但是多余。
既然用审核大小的方法了,你审核的大小是VIRTUALSIZE。
一旦RVA的数据落在内存比文件多出来那部分空间,你的程序是发现不了错误的。会得出一个错误的结论
那你还审核大小干嘛,不如直接用节头地址来判断。就不管输入的RVA和不合法
|
能力值:
( LV4,RANK:40 )
|
-
-
16 楼
例子吧:
比如一个节。
文件中 开始于1000。大小是500。就是1000-1500
内存属性是开始与1000。大小是600。就是1000-1600
现在有一个错误的资源RVA=1550。
你怎么能发现?为什么说是错误的资源也因该能看出来吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
让我再看看..
|
能力值:
( LV4,RANK:40 )
|
-
-
18 楼
用VIRTUALSIZE来判断1550是在节里边吧。偏移是550.但是文件节的大小才500。你怎么办?直接算你就算到后边了。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
virtualsize是没对齐的大小,应该比sizeofrawdata小啊
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
首先循环扫描节表并得到节在内存中的RVA,根据VIRTUALSIZE算出节中数据结束的RVA,最后比较判断目标RVA是否落在某个节内。
剩下的步骤不变和书上一样,这样怎么会有错?
VIRTUALSIZE是节没有进行对齐的原始大小,应该小于节按照磁盘对齐后的大小即sizeofrawdata,也就是小于500,偏移550不在判断的节内
|
能力值:
( LV4,RANK:40 )
|
-
-
21 楼
VIRTUALSIZE并不是总是比sizeofrawdata小。一般是这样。那么2总方法没区别
VIRTUALSIZE比sizeofrawdata大的话。就不严谨了。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
嗯,谢谢你了,还给我找了个图~~呵呵 以后多多交流!
|
|
|