2Four-F касательно Strings.mac

Тема в разделе "WASM.ASSEMBLER", создана пользователем Asterix, 30 авг 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Пытаюсь сделать так:
    Код (Text):
    1. invoke ErrorToLog, $CTA0(" \[Failed to apply protection against TerminateProcess\]")




    получаю строку вида:
    Код (Text):
    1. db ' <Failed to apply protection against _imp__TerminateProcess@8>',0




    Вопрос:



    Можно ли как-то пофиксить не уходя от макроса?
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    offtop: не по теме, но о наболевшем :)

    Тебя еще самого твой TerminateProcess не зае?

    /offtop
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    volodya

    У меня не было времени им заниматься, сейчас решил доделать наконец-то мессаги и выпустить очередную версию плагина, тем более что в нём был обнаружен и исправлен серьёзный баг, который почему-то проявлялся исключительно на XP(sp2),

    так что не зае? :derisive:



    ЗЫ: Нужно было мне законсперироваться и предложить другую фразу для примера :)
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    [ volodya: Тебя еще самого твой TerminateProcess не зае? ]



    Владимир, не мешайте людям интересоваться моим творчеством :) Хотя, я иногда сам жалею, что его сотворил ;)





    [ Asterix: Можно ли как-то пофиксить не уходя от макроса? ]



    Можно. Нужно поменять любую букву в TerminateProcess. Можно просто регистр terminateProcess. Такой косяк будет с любым символом. Всё что попало в масмовую символьную таблицу он пытается интерпритировать. Так что любым способом меняй символ, другого выхода не знаю. Кстати, в strings.mac в разделе "L I M I T A T I O N S" про это написано.
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Four-F

    > Кстати, в strings.mac в разделе "L I M I T A T I O N S" про это написано.



    Ну да, я помню что где-то читал, но забыл где :derisive:



    Я думал что можно сделать типа T\erminateProcess, но чтобы символ \ не появлялся в строке а макрос как-то это дело учёл бы :)
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Владимир, не мешайте людям интересоваться моим творчеством :)



    Господи, да что вы, что вы... Умолкаю. Ухожу :)
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Прикрутил. Два варианта воркэраунда.



    1. Либо определять \* в любом месте имени символа так:


    Код (Text):
    1. invoke ErrorToLog, $CTA0(" \[Failed to apply protection against Terminate\*Process\]")
    Макросы просто пропустят эту эскейп-последовательность.





    2. Либо определять любую заведомо неиспользуемую эскейп-последовательность в любом месте имени символа так:


    Код (Text):
    1. invoke ErrorToLog, $CTA0(" \[Failed to apply protection against T\erminateProcess\]")
    Т.к. эскейп-последовательности \e нет, то будет выдано "WARNING!: 'e' : unrecognized character escape sequence", но символ 'e' всё равно будет добавлен. Тут поведение такое же как в ЯВУ компиляторах.







    А что там, кстати, с "protection against TerminateProcess"? Функлицирует?



    [​IMG] _1623434495__Strings.rar
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Four-F

    > Прикрутил. Два варианта воркэраунда.



    Спасибо. ЗдОрово.



    > А что там, кстати, с "protection against TerminateProcess"? Функлицирует?



    Что-то я не понял вопрос %)
     
  9. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Помнится был длинный топик про обламывание TerminateProcess путем манипуляции с дескриптором безопастности. Я так понимаю, что ты пытаешься это реализовать или уже реализовал. Вот я и спрашиваю, получается или нет.
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Four-F

    Ага, теперь понял.

    Нет, с дескриптором что-то дело не пошло, или я намудрил или PETools умеет хорошо процессы убивать :derisive:

    Я сделал, но методом хука на OpenProcess :derisive:
     
  11. Kozyr

    Kozyr New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2004
    Сообщения:
    6
    Адрес:
    Ukraine
    Four-F

    Хотя, я иногда сам жалею, что его сотворил ;)

    А я ничуть не жалею, что ты его сотворил ;), за что тебе отдельное СПАСИБО!
     
  12. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    хм, какаято проблемма возникает когда в строке встречается восклицательный знак
    $CTA0("Error!")
    уже как не пробовал
    и так $CTA0("Error\!") и сяк $CTA0("Error\*!")
    проблема все остаётся к тому же ошибку компилятор выдает не одну (
     
  13. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    spencer
    смотрите макросы, там все написано
    Код (Text):
    1. ----------------------------------------------------------------------------------------------------
    2.  
    3. -   quotedtext:
    4.  
    5. The first parameter is "quoted text" you want to define.
    6. It is required and MUST be in quotation marks.
    7.  
    8. You can use escape characters.
    9.  
    10.     esc. char.     code         symbol
    11.     --------------------------------------------------
    12.         \:         21h            '!'
    13.         \{         28h            '('
    14.         \}         29h            ')'
    15.         \[         3Ch            '<'
    16.         \]         3Eh            '>'
    17.         \=         22h            '"'
    18.         \-         27h            "'"
    19.         \\         5Ch            '\'
    20.         \0          0             zero byte/word
    21.         \a          7             alert (BEL)
    22.         \b          8             backspace
    23.         \t          9             horizontal tabulation
    24.         \n         0Dh, 0Ah       new line
    25.         \l         0Ah            line feed
    26.         \v         0Bh            verticalal tabulation
    27.         \f         0Ch            formfeed
    28.         \r         0Dh            carrige return
    29.  
    30. --------------------------------------------------------------------------------------------
     
  14. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    1) нельзя ли с помошью определения *СT* получить размер строки? было бы очень удобно при использовании консолького вывода ато получается либо ваще не пользоваться ими либо каждый раз вызывать lstrlen
    2) нельзя ли писать контент для *CT* через запятую, чтобы иметь возможность писать на нескольких строках ?
    к примеру так :
    CTA "line 1\n",\
    "line 2"
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Для первого вижу два варианта: определять константу <string label>.length и/или добавить функцию, возвращающую размер объявленной строки, типа sizeofstr(strlabel) (ведь в расширенной версии макросов строки хранятся глобально и они уникальны). Но эту фичу действительно хотелось бы, если её ещё нет.

    По поводу второго вопроса - просто стилистическое украшение.

    Интересно услышать мнение Four-F.
     
  16. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Нет. Точнее говоря, в текущей реализации нет. Может быть и можно подпилить, но я не возьмусь ;)

    Нет, но специально для таких случает есть макросы без 0 на конце, т.е. они не терминируют строку и можно делать так:
    Код (Text):
    1. TA  "Some ", szText
    2. TA  "very "
    3. TA  "long "
    4. TA0 "text."
    5. invoke MessageBoxA, NULL, addr szText, NULL, MB_OK
     
  17. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Ещё нет и я ниасилю ;) Нужно пилить STRINGA/STRINGW чтоб они вместо составления строки подсчитывали и возвращали кол-во символов.
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Подправил. Теперь при определении строки с помощью ?T* "string",szString создаётся константа szString_length, равная длине строки в символах (+ завершающий ноль, если это ?T?0). Возможно, надо бы создавать аналогичную константу для определения длины строки в байтах (типа szString_size).

    Ограничения: указанный метод не работает для "многострочных" строк. Поэтому есть небольшой помощник $sizeofstr, вычисляющий размер строки в байтах как разницу между меткой и текущим смещением ($ - offset label). И такие строки должны быть только в данных, чтобы $sizeofstr была в одном сегменте с ними.

    Код (Text):
    1. TA0         "Hello, world",szHelloWorld
    2. TA          "hello1",szHello
    3. TA          "hello2"
    4. TA          "hello3"
    5. szHello_length = $sizeofstr(szHello)
    6.  
    7.     invoke WriteConsole,esi,addr szHello,szHello_length,addr tmp,ebx
    8.     invoke WriteConsole,esi,$CTA("test",szTest),szTest_length,addr tmp,ebx
     
  19. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    абсолютно ненужная фича, в сях обходятся без нее и нормально
     
  20. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Asterix
    В сях используют sizeof("string") :)