能力值:
( LV2,RANK:10 )
2 楼
谢谢,写的很全面。请问还会有下一个系列么?我也想学
能力值:
( LV13,RANK:420 )
3 楼
VirtualAddress>pSH->VirtualAddress
应该有 = 的
畸形文件很多,你上面只考虑了一种,
例如
计算test1的 RVA = 0x1000时的offset
计算test2的 RVA = 0x15CD时的offset
上传的附件:
能力值:
( LV2,RANK:10 )
4 楼
MARK
能力值:
( LV7,RANK:110 )
5 楼
[QUOTE=demoscene;1041276]
VirtualAddress>pSH->VirtualAddress
应该有 = 的
畸形文件很多,你上面只考虑了一种,
例如
计算test1的 RVA = 0x1000时的offset
计算test2的 RVA = 0x15CD时的offset[/QUOTE]
恩,感谢你的提醒,边界的判断忘记考虑到:)已修正,当初考虑到某些变形PE会把数据放在表头,ms的那个ImageRvaToVa老回出错,所以针对那种情况写了上面那个函数
test1的 RVA = 0x1000时,offset是第一个节头,如果磁盘文件有数据映射的话,PointerToRawData
就是要求的偏移了,第一个映射的节内对齐的颗粒已经是统一的了,只要有数据可以印映射可以直接返回PointerToRawData,test2用上述算法RVA = 0x15CD可以定位到offsetdemoscene还有更好的方法欢迎指点:)
能力值:
( LV7,RANK:110 )
6 楼
恩,几个月前就想写一下心得了,构想了好久,不知道从哪里下笔,水平有限,涉及的东西有太多了,我会尽力描述清楚的:)欢迎多多指导
能力值:
( LV2,RANK:10 )
7 楼
mk一下吧……
能力值:
( LV13,RANK:420 )
8 楼
test2用上述算法RVA = 0x15CD可以定位到offset
定位到的是多少,正确的应该是0x9CD,你可以用OD载入和用winhex载入对比看看
能力值:
( LV7,RANK:110 )
9 楼
[QUOTE=demoscene;1041382]
test2用上述算法RVA = 0x15CD可以定位到offset
定位到的是多少,正确的应该是0x9CD,你可以用OD载入和用winhex载入对比看看[/QUOTE]
恩,开始没注意,刚看了,test2 PointerToRawData被指定到了0x450h,但是loader在检查的时候是按照0x400h计算的,会导致0x50h偏移,记得以前linxer有篇文章写过了,loader装载的PointerToRawData按照:
PointerToRawData = PointerToRawData & (0xffffffff ^ FileAlignmentMask),所以还要考虑PointerToRawData的取值:)
能力值:
( LV2,RANK:10 )
10 楼
学习壳的第一步
能力值:
( LV12,RANK:230 )
11 楼
不错的科普文。我先标记"关注",期待你后续的文章,到时整合在一起。
能力值:
( LV7,RANK:110 )
12 楼
恩,感谢铅笔牛的赞赏,我会加倍努力完成这个系列的:)
能力值:
( LV2,RANK:10 )
13 楼
[QUOTE=小小的心;1041244] 载入规则的不同,导致“像”的内容相同,形态大小不同。
[QUOTE] 仔细看了一遍,这里有没有点问题?
能力值:
( LV7,RANK:110 )
14 楼
[QUOTE=mumaren;1042450][QUOTE=小小的心;1041244] 载入规则的不同,导致“像”的内容相同,形态大小不同。
仔细看了一遍,这里有没有点问题?
呵呵,这里的“像”就是映像文件的意思,类比如镜子中的“像”,是一个虚指的概念,实体是磁盘中的文件,因为映射到了虚拟地址空间,所以称为“像”。“像”的内容相同表示的是其自身同实体是一样,大小不同时因为按照不同的对齐粒度,产生了不同的大小:)
能力值:
( LV2,RANK:10 )
15 楼
先mark 便于查找。
能力值:
( LV3,RANK:20 )
16 楼
好久不来看雪了,继续开始学习了
能力值:
( LV3,RANK:20 )
17 楼
FileOffset = VA - IMAGEBASE - 该地址所在节内存起始偏移 + 该地址所在节磁盘起始偏移
FileOffset - 该地址所在节磁盘起始偏移 = VA - IMAGEBASE - 该地址所在节内存起始偏移
FileOffset - 该地址所在节磁盘起始偏移 = VA -(IMAGEBASE + 该地址所在节内存起始偏移)
FileOffset - 地址节头所在磁盘偏移 = VA - 地址节头所在内存偏移
是不是我太蠢了点 这个公式看了好久才看明白。。。。
这个公式的意思是不是就是 不管在磁盘或者内存中PE文件是以多少字节对齐的 同一个节内任何地方的地址相对于节头偏移总是相等的 也就是加载到内存的时候磁盘上面同一个连续的节 在内存中也一定是连续的 不知我这样想是不是对的
能力值:
( LV2,RANK:10 )
18 楼
精简。简练。初学的经典
能力值:
( LV7,RANK:110 )
19 楼
差值就是利用的相对节头偏移:)