二鸟学Win32 汇编——PE头文件

 
;代码段
    .code
;---------------------
; 将内存偏移量RVA转换为文件偏移
; lp_FileHead为文件头的起始地址
; _dwRVA为给定的RVA地址
;---------------------

_RVAToOffset proc _lpFileHead, _dwRVA
  local @ret

  pushad
  mov esi, _lpFileHead
  assume esi:ptr IMAGE_DOS_HEADER
  add esi, [esi].e_lfanew
  assume esi:ptr IMAGE_NT_HEADERS
  
  mov edx, esi
  add edx, sizeof IMAGE_NT_HEADERS
  assume edx, IMAGE_SECTION_HEADER
  
  mov edi,_dwRVA
  mov ecx, [esi].FileHeader.NumberOfSections
  
  .repeat
    mov eax, [edx].VirtualAddress
    add eax, [edx].SizeOfRawData
    .if (edi>=[edx].VirtualAddress) && (edi<eax)
      sub edi, [edx].VirtualAddress
      mov eax, [edx].PointerToRawData
      add eax, edi
      jmp @F
    .endif  
  .untilcxz
mov eax, -1

@@:assume esi:nothing
  assume edx:nothing
  mov @ret, eax
  popad
  mov eax, @ret
  ret  
_RVAToOffset endp

 

转载于:https://www.cnblogs.com/onetheway/p/3705813.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值