как определить, строка dword или byte?

Тема в разделе "WASM.BEGINNERS", создана пользователем Flasher, 28 сен 2005.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Здрасте.

    Собственно сабж.



    посиба заранее.
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    А что, строка может быть двордом или байтом?
     
  3. CrazyFun

    CrazyFun New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    129
    видимо имеется ввиду являются ли элементы строки байтами или словами(ansi или unicod н-р)

    интересно как стоит задача: дан указатель на строку хз где в памяти и надо определись что за размер символа?

    если тип известен на этапе ассемблирования то мб можно использовать директивы size и type

    если указатель получается на строку в памяти в процессе работы то думаю надо использовать особенности реализации разных типов строк(могу н-р предположить(не знаю я этого просто к примеру) что юникод строки могут разделяться 2мя нулевыми байтами, или там может существовать слово означ. конец строки)
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    eax может принять 2 вида



    ливо

    szSTR db "....",0

    mov eax,offset szSTR

    либо

    mov eax,2



    и при этом содержимое szSTR всегда разное, и вместо двойки тож всегда разные цифры.



    Как определить, в eax'e байты или нет ?

    вот :)
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Что-то ты не то говоришь.



    mov eax,2 - здесь в еах будет число 2.

    mov eax,offset szSTR - здесь в еах будет адрес szSTR.



    Какое отношение имеет 2 к строке твоей?
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    вообщето не совсем поня тебя..

    скажу что

    mov eax,offset szSTR

    mov ax,word ptr [eax]

    это косвенная адресация и берешь байт (у тебя в еах будет код символа !)

    а если

    mov eax,2 то это непосредственаня адресация , где ты а eax помещаешь непосредственно 2 то в eax у тебя будет 2

    и не выжно что ты поместишь в eax .. у тебя там всегда будут биты , байты .. Другого там не будет . По крайней мере я не видел процессоров работающих на других единицах информации (сосиски, сардельки...)
     
  7. Anton_K

    Anton_K New Member

    Публикаций:
    0
    Регистрация:
    18 май 2005
    Сообщения:
    9
    Адрес:
    Germany
    Как я понял, ему нужно определить лежит ли в eax указатель на строку...
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Ну тогда, как я думаю , необходимо проверять опкод этой инструкции .
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    В eax могут быть только дворды (регистр ведь 32 бита, а не 8). Этот дворд либо просто какое-то число (например результат вычислений), либо это указатель (в eax лежит адрес строки).

    Если тебе нужно определить, правильно ли указывает eax на твою строку, то просто сравни его с адресом твоей строки:


    Код (Text):
    1.         cmp  eax, offset szSTR
    2.         je   label_yes
    3.        
    4. label_no:
    5.         ;сюда программа придёт, если в eax число, отличное от адреса строки.
    6.  
    7.  
    8. label_yes:        ;сюда программа придёт, если в eax адрес твоей строки.






    Можно также определить, допустимый ли для чтения адрес в eax при помощи api-функции IsBadReadPtr, передав ей в качестве параметра содержимое eax.



    А вообще, ты бы сосредоточился и сформулировал бы свой вопрос правильно, чтобы народ не гадал, чего тебе нужно
     
  10. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    cresta





    Как мне сравнить, если там всегда разные значения\данные.



    А лано, удалите топик, один фик не смогу лучше обяснять, и нефик вас больще мучать ;)
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Flasher

    Содержимое szSTR всегда разное, но при mov eax,offset szSTR ты грузишь в eax не содержимое строки, а адрес szSTR, а эта величина является константой и ее можно проверять cmp eax,offset szStr как предлагает cresta