能力值:
( LV9,RANK:490 )
|
-
-
2 楼
不太明白你的意思。
但你可以用OD调试一下看看结果,找一找哪里不对
|
能力值:
( LV13,RANK:370 )
|
-
-
3 楼
address=newentryaddress;
tmp=address>>24;
waddress[3]=tmp;
tmp=address<<8;
tmp=tmp>>24;
waddress[2]=tmp;
tmp=address<<16;
tmp=tmp>>24;
waddress[1]=tmp;
tmp=address<<24;
tmp=tmp>>24;
waddress[0]=tmp;
retf=_write(ret,waddress,4); //把新的入口地址写入文件
这个过程就是把newentryaddress的值按照高高低低的顺序存放到字符数组waddress中去,然后把waddress数组4个字节数据写到文件里去,实际就是写入了newentryaddress的值
retf=_write(ret,waddress,4); 为何不写成
retf=_write(ret,&newentryaddress,4);
你所考虑的把数据反转过来再写入文件是否PE加载会出错?不会
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
那为什么要先反转在写如PE文件呢?
|
能力值:
( LV13,RANK:370 )
|
-
-
5 楼
看的别人的代码吧,你还是自己调试一下吧
他之所以要反转,是为了把newentryaddress按照高高低低的顺序存放到字符数组waddress中去,以便_write(ret,waddress,4)的执行
如果newentryaddress= 0x00401040;
执行位上面的移位操作后最终waddress各元素值的值为
waddress[3] = 0x00
waddress[2] = 0x40
waddress[1] = 0x10
waddress[0] = 0x40 retf=_write(ret,waddress,4)将会把以waddress为起始地址的四个字节数据40 10 40 00顺序写到文件中去,也就是先写
waddress[0] ,
再写waddress[1],waddress[2],waddress[3] , 也就是写入了0x00401040
实际上去掉上面的移位操作,直接retf=_write(ret,&newentryaddress,4)就可以实现写入入口点操作了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我假设_write从左往右写,写先waddress[0](40),再写waddress[1](10),等等……
结果写出来的从左往右看不就是40104000了么?跟我们平常写字一样……
|
能力值:
( LV13,RANK:370 )
|
-
-
7 楼
嗯,,,,,,,,,
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
楼上大哥难道你没发现吗?
我的理解正好跟你的相反……
|
能力值:
( LV13,RANK:370 )
|
-
-
9 楼
右端是高地址,左端是低地址,
从左往右看是40104000,从右往左看就是00401040了, PE装载器就是从右往左看了四字节
|
|
|