Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    я глупость написал.... В стеке находится адрес возврата, а я имею в распоряжении адрес начала перехватываемой функции...
    А можно тогда в момент внедрения длл в процесс, еще до затирания первых байт узнать адрес возврата перехватываемой функции? И потом его сравнивать с тем, что хранится в стеке?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    kamax70
    адреса возврата будут каждый раз рзные поскольку функция на то и функция, чтобы вызываться неоднократно из разных мест прог.
    просто меняешь свой jmp myfunc на call mufunc
    в обработчике с вершины стека берёшь адрес перехваченой функии (с поправкой на call) и не забудь вовращаться обратно через ret.
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    только поправь адрес возврата перед возвратом
     
  4. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Срочно ищу программу (курсовик горит):

    Программа "Прямой алгоритм трассировки лучей"
    Описание:
    1 источник света и 1 препятствие
    источник точечный
    препятствие - линия
    координаты задаются и источника и препятствия вручную
    Задание: используя SSE рассчитать трассировку лучей

    Помогите пожалуйста!!!
     
  5. aggro

    aggro New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2010
    Сообщения:
    8
    Ребята, помогите пожалуйста написать на ассемблере:

     
  6. adgam

    adgam New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2010
    Сообщения:
    3
    Здравствуйте!Необходимо ввести символьную строку,найти имена регистров в ней и вывести на экран содержимое этих регистров в шестнадцатиричном формате.

    Есть две программы.Одна находит имена регистров в строке и выводит их на экран.Вторая выводит содержимое регистра ax в шестнадцатиричном формате.

    Как можно связать эти программы,чтобы решить исходную задачу?Есть ли более оптимальный вариант решения задачи?

    Коды программ приводятся ниже.

    Заранее спасибо!

    Prog1.asm находит имена регистров в строке и выводит их на экран
    Код (Text):
    1. S       segment stack 'stack'
    2.         dw 64 dup(?)
    3. S       ends
    4.  
    5. D       segment 'data'
    6. t       db 10,11 dup(?)
    7.  
    8. tog     db 10,13,'$'
    9. D       ends
    10.  
    11. C       segment 'code'
    12. assume  cs:C, ss:S, ds:D
    13.  
    14. beg     proc far
    15.         push ds
    16.         xor ax,ax
    17.         push ax
    18.         mov ax,D
    19.         mov ds,ax
    20.  
    21.         mov ah,10
    22.         lea dx,t
    23.         int 21h
    24.  
    25.         mov ah,9
    26.         lea dx,tog
    27.         int 21h
    28.        
    29.         xor si,si
    30.         xor di,di
    31.  
    32.         mov di,2
    33.  
    34. l:      mov dl,t[di]
    35.  
    36.         cmp dl,13
    37.         je v
    38.        
    39.         xor bx,bx
    40.        
    41.         cmp dl,'e'
    42.         jne lc
    43.         mov bl,dl
    44.         inc di
    45.         mov dl,t[di]
    46.  
    47. lc:     mov cl,t[di+1]
    48.        
    49.         cmp dl,'a'
    50.         jb l5
    51.  
    52.         cmp dl,'b'
    53.         jbe l4
    54.  
    55. l1:     cmp dl,'s'
    56.         jne l51
    57.         cmp cl,'i'
    58.         je l6
    59.         cmp cl,'s'
    60.         je l7
    61.  
    62. l51:    cmp dl,'c'
    63.         je lk
    64.        
    65.         cmp dl,'d'
    66.         jne l5
    67.  
    68.        
    69. l3:     cmp cl,'i'
    70.         je l6
    71.        
    72. lk:     cmp cl,'s'
    73.         je l7
    74.  
    75. l4:     cmp cl,'x'
    76.         jne l5
    77.        
    78.  
    79. l6:     cmp bl,0
    80.         je l7
    81.         push dx
    82.         mov dl,bl
    83.         mov ah,2
    84.         int 21h
    85.         pop dx
    86.        
    87. l7:     mov ah,2
    88.         int 21h
    89.         mov dl,cl
    90.         mov ah,2
    91.         int 21h
    92.         mov ah,2
    93.         mov dl,' '
    94.         int 21h
    95.         inc di
    96. l5:     inc di
    97.         jmp l
    98.  
    99. v:      ret
    100.  
    101. beg     endp
    102. C       ends
    103.         end beg
    Prog2.asm выводит содержимое регистра ax в шестнадцатиричном формате.

    Код (Text):
    1. .286
    2. S       segment stack 'stack'
    3.         dw 64 dup(?)
    4. S       ends
    5.  
    6. D       segment 'data'
    7. t       db 10,11 dup(?)
    8. tog     db 10,13,'$'
    9. D       ends
    10.  
    11. C       segment 'code'
    12. assume  cs:C,ss:S, ds:D
    13.  
    14. beg     proc far
    15.         push ds
    16.         xor ax,ax
    17.         push ax
    18.         mov ax,D
    19.         mov ds,ax
    20.  
    21.         mov ax,0D8h
    22.  
    23.         push    ax
    24.         xchg    ah,al          
    25.         jmp     print_al
    26.        
    27. l1:     mov cx,1
    28. pop     ax              
    29.        
    30. print_al:
    31.         mov     dh,al
    32.         and     dh,0Fh          
    33.         shr     al,4            
    34.  
    35.         cmp     al,10          
    36.         sbb     al,69h          
    37.         das                    
    38.  
    39.         mov     dl,al          
    40.         mov     ah,2            
    41.         int     21h            
    42.  
    43.         mov     al,dh          
    44.                
    45.         cmp     al,10          
    46.         sbb     al,69h          
    47.         das                    
    48.  
    49.         mov     dl,al          
    50.         mov     ah,2            
    51.         int     21h    
    52. loop l1
    53. ret
    54.  
    55. beg     endp
    56. C       ends
    57.         end beg
     
  7. Macheda

    Macheda New Member

    Публикаций:
    0
    Регистрация:
    7 май 2010
    Сообщения:
    4
    Помогите с прогой пожалуста!Надо на ассемблере забадяжить...Вообщем строку вводим и из нее удалить все гласные буквы и если слово состоит из одной гласной буквы,то помимо ее удаления, надо удалить лишний пробел.
     
  8. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Недавно отписывался на форуме фасма; вот CTRL+C, CTRL+V; дополните .more_word_breaks: гласными русского языка
    Код (Text):
    1. format pe gui 4.0
    2. include 'win32ax.inc'
    3.  
    4.  
    5.  
    6.  
    7.  
    8.  
    9.  
    10.  
    11. section '' code import readable writable executable
    12. library advapi32, 'advapi32.dll',\
    13.         kernel32, 'kernel32.dll',\
    14.         user32,   'user32.dll'
    15. include 'api\advapi32.inc'
    16. include 'api\kernel32.inc'
    17. include 'api\user32.inc'
    18.  
    19.  
    20.  
    21.  
    22. BUF_START:
    23. buf db 'a-b +c* d/e\f. g,h<i>j (k)[l]{m}&n:       o;^%$#p     ''"q!r`  s~t^$ uvwxyz',0,'hello',13,13,13,10,10,9,9,9,0,'http://www.board.flatassembler.net',0
    24. BUF_END:
    25.  
    26. entry $
    27.  
    28.         cld
    29.         mov     esi,buf
    30.         mov     edi,esi
    31.         mov     ecx,BUF_END-BUF_START
    32.   .loop:
    33.         lodsb
    34.         test    al,al
    35.         jnz     .more_word_breaks
    36.   .word_break:
    37.         lea     eax,[edi+1]
    38.         neg     eax
    39.         add     eax,esi
    40.         cmovz   edi,esi
    41.         jz      .continue
    42.         ;;что-то ваше
    43.         mov     byte[esi-1],0
    44.         push    ecx
    45.         invoke  MessageBoxA,0,edi,0,0
    46.         pop     ecx
    47.         ;;
    48.         mov     edi,esi
    49.         jmp     .continue
    50.   .more_word_breaks:
    51.         cmp     al,9
    52.         je      .word_break
    53.         cmp     al,10
    54.         je      .word_break
    55.         cmp     al,13
    56.         je      .word_break
    57.         cmp     al,32
    58.         je      .word_break
    59.   .continue:
    60.         loop    .loop
    61.  
    62.         invoke  ExitProcess,0
     
  9. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    сорсе
     
  10. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    Вопрос такой...

    Нужно выделить область памяти размера n байт, записать в нее некоторый код, после чего
    выполнить jmp на эту память. Пробовал выделить память с помощью Getmem или LocalAlloc, но ничего не получилось.. Как можно выделить память на ассемблере?
     
  11. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    CTRL+C,CTRL+V
     
  12. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    Отлично, с выделением памяти я разобрался..Но проблема с переходом.
    Например я хочу выделить 5 байт и в них записать команду джамп на функцию f2.
    Из функции f1 я делаю джамп на указатель на выделенную область памяти.. По-хорошему должа запуститься функция f2, но вылетает ошибка.. Мб сама идея неправильная?
     
  13. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    kamax70
    какая?
    VirtualProtect делал?
     
  14. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    Access violation at address
    Virtualprotect делал, не помогает.
     
  15. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    kamax70
    приаттачь свой шедевр
     
  16. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Код (Text):
    1. PATCH_START:
    2.          jmp     f2 ;$eb[b]00[/b], те. проскочить 0 байт и мы на месте
    3. PATCH_END:
    4. proc f2
    5.          ret
    6. endp
    при копировании участка PATCH jmp f2 по-прежнему прыгнет на байт после себя, но не на желанную функцию
     
  17. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    edemko
    так ты его туда посылаеш :))
    подумай спокойно, не торопись
     
  18. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    в смысле её, программа она
     
  19. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    метки не копируются!
    Код (Text):
    1. mov eax, new_f2 ; new_f2 это адрес куда ты скопировал
    2. call eax
     
  20. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    edemko
    ссори, я тебя с kamax70 попутал https://wasm.ru/forum/viewtopic.php?pid=377746#p377746
    про метку получается бред, а вызывать так как написал
    Код (Text):
    1. mov eax, my_func ; my_func переменная c адресом функции
    2. call eax
    kamax70
    где шедевр?