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

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

  1. cyberia

    cyberia New Member

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    1
    Помогите пожалуйста решить 3 задачки на TASM.

    1. Написать программу, вычисляющую корень из двух с заданной точностью. Количество знаков после запятой вводится с клавиатуры.

    2. Написать программу, выводящую двигающуюся по экрану надпись из букв, мигающих разными цветами. Затем буквы разлетаются, бьются о края экрана и собираются обратно в слово.

    3.Разработать программу вывода различных фигур, составленных из треугольников. Для этого вводим одну цифру - высоту треугольника и рисуем треугольник цифрами, которые меньше или равны введенной. Например, если мы ввели 3, то выводимые фигуры могут иметь вид:
    1 1 3 3
    22 222 22 222
    333 33333 111 11111
    22 222 22 222
    1 1 3 3
     
  2. kamax70

    kamax70 New Member

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

    Есть прога, выполняющая перехват API-функций методом сплайсинга. Мне надо например, что она перехватывала 2 или 3 функции одновременно. Для каждой из них я передаю управление на свою функцию myfunc, а затем возвращаю обратно и даю им спокойно выполниться.

    Вопрос такой : как мне внутри myfunc узнать, какая именно и 3 возможный функций перехвачена? Ибо для каждой из них мне надо написать разные действия ..

    Например если я перехватываею CreateFileA и MessageBoxExA, то при перехвате MessageBoxExA мне нужно вывести еще одно сообщение, а при перехвате CreateFileA нужно создать пустой текстовый файл.
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kamax70
    Очень путано объясняете, сложно что-то понять.

    ЗЫ Теперь такие лабы/курсачи задают?
     
  4. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    Попробую объяснить еще раз :
    Моя программа должна перехватить методом сплайсинга CreateFileA и MessageBoxExA и возможно еще какие-нибудь функции. При перехвате этих функций я заменяю первые 6 байт на джамп на мою функцию myfunc, которая выполняет некоторые действия, потом восстанавливает затертые 6 байт и дает функциям выполниться.
    Проблема в том, что мне нужно определить внутри myfunc, какая именно функция в данный момент перехвачена, будь то CreateFileA или MessageBoxExA или еще что-то , и исходя из этого выполнять какие-то действия...

    ЗЫ Да, такие курсячи... Это сложнее или легче, чем то, что задавали раньше?
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kamax70
    Э. зачем все функции перехватывать в одну?
     
  6. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    Ну условие такое :) Я как бы не знаю, сколько мне их всего перехватывать.. Список функций для перехвата находится в текстовом файле, их может быть одна, а может 10... Поэтому я и перехватываю в одну.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Муть это всё, конкретные технологии. Лучше что-нибудь такое, что заставляет мыслить, исследовать, фантазировать. ^)
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kamax70
    А чего сложного? Поднялся по стеку, поискал в IAT, всего делов.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    kamax70
    тогда увеличь количество затираемых байт:
    mov [number_func], 1 ; соответсвенно 1,2,3 и т.д. номера функций из файла
    jmp ...

    или
    push eax
    mov eax, 1 ; 2, 3, ...
    jmp ...

    только не забудь после опознания pop eax сделать :)
     
  10. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    А что поискал-то? Я вас немного не понял.. Можете хотя бы без кода пример привести?
     
  11. kamax70

    kamax70 New Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kamax70
    Туплю, тут же сплайс. Ну тогда нужно где-то писать информацию о том что вызвано, например в тот-же стек писать адрес функции.
     
  13. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    А будешь затирать больше 6 байт и твой затирающий код перед jmp будет сохранять метку функции в твоей переменной или в eax (второе предпочтительнее). Например CreateFileA - 1, MessageBoxExA - 2, и т.д.
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Или делать не jmp, а call.
     
  15. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    гы-гы - тоже туплю вместе с Booster ;)
    адрес вызова то уже сидит на верхушке стека и никаких меток не надо просто бери его и сравнивай с адресами функций - они же известны - без них и затереть ничего не сможешь ;)
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Y_Mur
    >гы-гы - тоже туплю вместе с Booster ;)
    А не адрес возврата. ^)
     
  17. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Booster
    осознал - каюсь :) да call вместо jmp рулит ;)
     
  18. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    )) вы молодцы , что осознали, а я запутался )
    Например я знаю, что adr_CF - указатель на начало CreateFIleA, adr_MB- указатель на MessageBoxExA. Я вначале делаю джамп на @myfunc (на делфи). При вызове перехватываемой функции сразу происходит джамп. В этот момент в вершине стека находится что?
     
  19. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kamax70
    s/джамп /кол
     
  20. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    mov eax, esp
    И дальше сравнивать eax и adr_CF / adr_MB?