Получить смещение в файле

Discussion in 'WASM.BEGINNERS' started by 2FED, Aug 14, 2008.

  1. 2FED

    2FED New Member

    Blog Posts:
    0
    Joined:
    Feb 20, 2008
    Messages:
    1,002
    Как из AddressOfEntryPoint получить смещение в файле?

    Посмотрел в PE tools

    AddressOfEntryPoint =2654h
    Смещение = 1A54h

    Как это высщитывается? Читать статьи про вирусы нету времени..
     
  2. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Code (Text):
    1. CalculateOffsetEntryPoint proc uses ebx ImageBase:PVOID, ResultOffset:PULONG, ResultRva:PULONG
    2.     invoke RtlImageNtHeader, ImageBase
    3.     test eax,eax
    4.     jz err_format_
    5.     lea ebx,[eax+SizeOf IMAGE_NT_HEADERS-SizeOf IMAGE_SECTION_HEADER]
    6.     assume ebx:PIMAGE_SECTION_HEADER
    7.     movzx ecx,IMAGE_NT_HEADERS.FileHeader.NumberOfSections[eax]
    8.     test ecx,ecx
    9.     jz err_format_
    10.     mov edx,IMAGE_NT_HEADERS.OptionalHeader.AddressOfEntryPoint[eax]
    11.     mov eax,ResultRva
    12.     mov dword ptr [eax],edx
    13. loop_:
    14.     add ebx,SizeOf IMAGE_SECTION_HEADER
    15.     mov eax,[ebx].VirtualAddress
    16.     cmp eax,edx
    17.     jnc err_param_
    18.     add eax,[ebx].VirtualSize
    19.     cmp eax,edx
    20.     jna next_section_
    21.     sub edx,[ebx].VirtualAddress
    22.     add edx,[ebx].PointerToRawData
    23.     mov eax,ResultOffset
    24.     mov dword ptr [eax],edx
    25.     xor eax,eax
    26.     jmp exit_  
    27. next_section_:
    28.     loop loop_
    29.     mov eax,STATUS_OBJECT_NAME_NOT_FOUND
    30. exit_:
    31.     ret
    32. err_param_:
    33.     mov eax,STATUS_INVALID_PARAMETER_2
    34.     jmp exit_
    35. err_format_:
    36.     mov eax,STATUS_INVALID_IMAGE_FORMAT
    37.     jmp exit_
    38. CalculateOffsetEntryPoint endp
     
  3. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    В таблице секций смотрим смещение в файле секции кода и ее смещение в памяти (RVA). Разница этих смещений определяет коррекцию RVA точки входа.
     
  4. GMax

    GMax Member

    Blog Posts:
    0
    Joined:
    Jul 3, 2006
    Messages:
    218
    http://www.wasm.ru/forum/viewtopic.php?id=23533
     
  5. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    GoldFinch
    В модуле обычно есть есчо секции кроме секции кода.
     
  6. 2FED

    2FED New Member

    Blog Posts:
    0
    Joined:
    Feb 20, 2008
    Messages:
    1,002
    Спасибо, разобрался.