这里填入节的名字sn1(这个域有8个字节哟),并且给VirtualSize(有的地方称作PhysicalSize)我的病毒的大小,这个不需要对齐。说到对齐,大家要清楚一个概念就是内存中的数据节对齐,文件中的数据文件对齐。
movecx,DWORDptr[esi38h]
moveax,DWORDptr[edi-28h0ch]
addeax,DWORDptr[edi-28h8h]
movecx,DWORDptr[esi38h]
invokeAlign1
movDWORDptr[edi0ch],eax
取得节对齐后,给节的VirtualAddress成员即在内存中装入本节时的内存地址赋。方法是取得上一个节的起始地址加上上一节的未对齐的大小即VirtualSize还要经过节对齐,就可以了。
movecx,DWORDptr[esi3ch]
moveax,Virus_End-Virus_Start
invokeAlign1
movDWORDptr[edi10h],eax
现在我们该给节的SizeOfRawData给了。这个域是指节在文件中的大小,必须要经过文件对齐,那好,我们取得病毒大小,文件对齐后就行了
moveax,DWORDptr[edi-28h10h]
addeax,DWORDptr[edi-28h14h]
movDWORDptr[edi14h],eax
还有个节在文件中偏移的叫PointerToRawData,这个的计算方法是上一个节的SizeOfRawData加上上一个节的PointerToRawData。为什么呢?自己动脑壳吧。不动脑壳学会了也没用。
movDWORDptr[edi24h],0E00000E0h