1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Tasm section writable

Тема в разделе "WASM.BEGINNERS", создана пользователем temi4, 27 янв 2011.

  1. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    Привет подскажите как в тасме под Винду сделать секцию кода ERW? Чтобы когда записываю значение в переменную объявленную в секции кода не вылетала ошибка?
     
  2. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    temi4
    Если под Windows ,то как обычно VirtualProtectEx.
     
  3. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    а более подробно можете подсказать?

    допустим есть
    Код (Text):
    1. .386p
    2. .model flat
    3.  
    4. extrn   MessageBoxA:PROC
    5. extrn   ExitProcess:PROC
    6.  
    7. .data  
    8. pTitle   db "Hi",0
    9.  
    10. .code
    11. msg:
    12.        mov    pMsg,"dsss"
    13.  
    14.        push    0                        
    15.        push    offset pTitle
    16.        push    offset pMsg
    17.        push    0
    18.        call    MessageBoxA
    19.  
    20.        pMsg  db    ?
    21.  
    22.        push    00h                            
    23.        call    ExitProcess
    24. end msg
     
  4. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    temi4
    В общем вот:
    BOOL WINAPI VirtualProtectEx(
    __in HANDLE hProcess, //Это получаем через GetCurrentProcess()
    __in LPVOID lpAddress, //Указатель на блок памяти,в вашем случае в CS надо посмотреть по идее если изменять аттрибуты для всей секции .code. В ASMе точно не знаю.
    //Хотя если только для одной переменной,то addr pMsg может прокатить как указатель.
    __in SIZE_T dwSize, //Размер,тут все ясно,в случае одной переменной,а для всего .code сразу и не скажу.
    __in DWORD flNewProtect, //Это смотреть здесь http://msdn.microsoft.com/ru-ru/library/aa366786(v=VS.85).aspx
    __out PDWORD lpflOldProtect
    );
    На счет lpflOldProtect - извиняюсь ошибся. Здесь просто передай соответствующий указатель - переменная принимает старые аттрибуты защиты.
    Add:
    На счет размера .code - надо смотреть PE-заголовок,там таблица секций есть. Почитай Ic'zeliona PE-формат. А лучше защити
    только одну переменную. С PE не помогу - я сам новичок))).
     
  5. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    Код (Text):
    1. .386p
    2. .model flat
    3.  
    4. extrn   MessageBoxA:PROC
    5. extrn   ExitProcess:PROC
    6. extrn   GetCurrentProcessId:PROC
    7. extrn   VirtualProtectEx:PROC
    8.  
    9. .data  
    10. pTitle   db "Hi",0
    11. total size  equ (offset msg_end - offset msg_start)
    12. mm       dd ?
    13.  
    14. .code
    15.  
    16. msg:
    17. msg_start label byte
    18.        
    19.        call   GetCurrentProcessId
    20.        
    21.         push  mm
    22.         push  40h
    23.         push  total_size
    24.         push  offset msg_start
    25.         push  eax
    26.         call  VirtualProtectEx
    27.        
    28.        mov    pMsg,"dsss"
    29.  
    30.        push    0                        
    31.        push    offset pTitle
    32.        push    offset pMsg
    33.        push    0
    34.        call    MessageBoxA
    35.  
    36.        pMsg  db    ?
    37.  
    38.        push    00h                            
    39.        call    ExitProcess
    40. msg_end label byte
    41. end msg
    усли я все правильно понял, то должно быть так, но возвращает ERROR_NOACCESS после вызова VirtualProtectEx
    Что не так?
     
  6. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    939
    GetCurrentProcessId requires an argument.
     
  7. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    DWORD GetCurrentProcessId(VOID) - функция не требует параметров
     
  8. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    939
    Sorry, temi4 - indeed it doesn't. Please try GetCurrentProcess (with no "Id") (should return -1) and your example should work.
     
  9. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    ok, thanks, I will try