Запись кода в выравнивающие нули

Тема в разделе "WASM.BEGINNERS", создана пользователем MaxOn, 14 авг 2009.

  1. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    Здравствуйте! У меня такая проблема:
    пытаюсь записать свой код в выравнивающие нули секции. При записи кода руками(в hex редакторе) все нормально.
    Но вот при записи программным путем - Access Violation на инструкции movsb/stosb. Адрес для записи кода вычисляю так : VA секции + VirtualSize.
    Вот код(в месте где эксепшен стоит коммет):
    Код (Text):
    1. format PE GUI 5.0
    2. include '%fasminc%\win32ax.inc'
    3. include '%fasminc%\myMacro.inc'
    4.  
    5. IB equ 400000h
    6. section  '.code' code writeable readable executable
    7. include '%fasminc%\importm.inc'
    8. kernel32:
    9. include '%fasminc%\kernel32.inc'
    10. dd 0
    11. user32:
    12. include '%fasminc%\user32.inc'
    13. dd 0
    14.  
    15. codeX: 
    16.     xor esp,esp
    17. endX:
    18.  
    19. szFileName db 'test.exe',0
    20. hFile dd ?
    21. OEP dd 0
    22.  
    23.  
    24. entry $
    25.    
    26.     X_INIT kernel32
    27.    
    28.     invoke CreateFileA,szFileName,GENERIC_ALL,FILE_SHARE_READ+FILE_SHARE_WRITE,0,OPEN_EXISTING,0x80,0
    29.     push eax;FILE HANDLE=====
    30.    
    31.    
    32.     invoke CreateFileMappingA,eax,0,PAGE_EXECUTE_READWRITE,0,0,0
    33.     push eax;CREATE FILE MAPPING HANDLE====
    34.     invoke MapViewOfFile,eax,FILE_MAP_ALL_ACCESS,0,0,0
    35.     push eax;MAP VIEW OF FILE HANDLE======
    36.    
    37.     ;получаем OEP
    38.    
    39.    
    40.     add eax,[eax+3Ch]
    41.     mov ecx,[eax+40]
    42.     add ecx,IB
    43.     mov [OEP],ecx
    44.    
    45.     ;находим последнюю секцию виртуально и физически.
    46.    
    47.     xor ecx,ecx
    48.     mov cx,[eax+6]
    49.     ;push cx
    50.     dec cx
    51.     push eax;POINTER TO NT HEADER
    52.     add eax,248
    53.     test cx,cx
    54.     mov edi,[eax+20];edi - физическое смещение первой секции.
    55.     mov esi,[eax+12];esi - виртуальное смещение первой секции
    56.     jz _write
    57.  
    58.     _nextSec:
    59.     add eax,40;переходим к следующей секции
    60.    
    61.     cmp edi,[eax+20]
    62.     cmp esi,[eax+12]
    63.    
    64.     jns _next
    65.     mov edi,[eax+20];r_off последней секции
    66.     mov esi,[eax+12];VA последней секции.
    67.     _next:
    68.     loop _nextSec
    69.     mov ebp,[eax+16]
    70.     test ebp,ebp
    71.     jz _exit
    72.  
    73. _write:
    74.     add esi,[eax+8]
    75.     add esi,[esp+4]
    76.    
    77.     mov edi,esi
    78.     mov esi,codeX
    79.     mov ecx,endX-codeX
    80.     _movsb:
    81.         movsb;ACCESS VIOLATION when writing
    82.         inc eax
    83.         inc edi
    84.     loop _movsb
    85.    
    86.    
    87. _change:
    88.    
    89.    
    90. _exit:
    91.     invoke UnmapViewOfFile
    92.     invoke CloseHandle
    93.     invoke CloseHandle,[hFile]
    94.     invoke ExitProcess,0
     
  2. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    MaxOn, shihet nën një Debugger?
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MaxOn
    Физически не находите, для этого нужно мапить физическую память, нормально этим хал занимается.
    Возник сепшин - описание его и контекст в студию.
     
  4. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    Clerk
    Код (Text):
    1. ExceptionCode  C0000005
    2. ExceptionFlags 0
    3. ExceptionRecord 0
    4. ExceptionAddress 0040117E
    5. NumberParameters     2
    6. ExceptionInformation 1
    7.  
    8. ContextFlags 1003F     
    9. Dr0 0
    10. Dr1 0
    11. Dr2 0
    12. Dr3 0
    13. Dr6 0
    14. Dr7 0
    15. FloatSave    FFFF027F
    16. regSegGs FFFF0000
    17. regSegFs     FFFFFFFF
    18. regSegEs     0
    19. regSegDs 0     
    20. regEdi 0
    21. regEsi FFFF0000
    22. regEbx 00000000
    23. regEdx 01050104
    24. regEcx 0000D1D8
    25. regEax 0
    26. regEbp 0
    27. regEip  0  
    28. regSegCs 0
    29. regEFlags 0
    30. regEsp  0
    31. regSegSs0
    32. ExtendedRegisters 0
    litrovith Я как бы русский!
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MaxOn
    Не валидный контекст.
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    MaxOn, видно ж, что при выполнении movsb в esi и edi - чото не то... не судьба взять отладчик и посмотреть почему?
    код выше - нечитабелен, учись использовать структуры, virtual at...
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Freeman
    Код (Text):
    1. ContextFlags 1003F
    Код (Text):
    1. regEip  0
    2. regSegCs 0
    3. regEFlags 0
    Ядро не позволит обнулить кодовый селектор.
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    да, контекст походу левый

    Код (Text):
    1. ExceptionAddress 0040117E
    2. regEip  0
     
  9. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    всем спасибо ,во всем разобрался.