例子部分代码在这里
xor eax,eax
mov ebx,edi
add ebx,sizeof IMAGE_NT_HEADERS
.while ax <= [esi].FileHeader.NumberOfSections
mov ecx,[ebx].SizeOfRawData
.if ecx && ([ebx].Characteristics & IMAGE_SCN_MEM_EXECUTE)
sub ecx,[ebx].Misc.VirtualSize
.if ecx > offset APPEND_CODE_END-offset APPEND_CODE
or [ebx].Characteristics,IMAGE_SCN_MEM_READ or IMAGE_SCN_MEM_WRITE
add [ebx].Misc.VirtualSize,offset APPEND_CODE_END-offset APPEND_CODE ;;;;;这个地址已经是加好了的
jmp @F
.endif
.endif
add ebx,IMAGE_SECTION_HEADER
inc ax
.endw
invoke CloseHandle,@hFile
invoke DeleteFile,addr @szNewFile
invoke SetWindowText,hWinEdit,addr szErrNoRoom
jmp _Ret
@@:
;********************************************************************
; 将新增代码加入代码节的空隙中
;********************************************************************
mov eax,[ebx].VirtualAddress
add eax,[ebx].Misc.VirtualSize;;;;上面这个大小是加上的,这里为什么不需要 再减去 offset APPEND_CODE_END-offset APPEND_CODE 来获得内存添加代码的开始位置????
mov @dwAddCodeBase,eax
mov eax,[ebx].PointerToRawData
这里的问题 同上。。。。。。。。。。。
add eax,[ebx].Misc.VirtualSize
注释的地方是我的疑问,在算@dwAddCodeBase 这个值得时候,它是用[ebx].VirtualAddress直接加扩大后的大小 即 add eax,[ebx].Misc.VirtualSize,这还是 新加代码的 起始部位么?我怎么总感觉是 新加代码的结束部位呢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课