один буфер и разные STRUC

Тема в разделе "WASM.BEGINNERS", создана пользователем warsem, 14 сен 2009.

  1. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    интересуюсь строго для того, что бы удовлетворитца морально и сделать по своему:)

    есть буфер lBuffer
    научите обращатца в масме к тому же буферу как к конкретным структурам(например win32_find_data)
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Как-то таг? =)

    mov edi, [eax].OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress
    add edi, ebx
    assume edi:ptr IMAGE_EXPORT_DIRECTORY
    mov ecx, [edi].NumberOfFunctions
     
  3. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    первой строчкой должно было еще быть
    assume eax:ptr IMAGE_NT_HEADERS
    но я думаю и так понятно)
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    mov win32_find_data.filename[lbuffer],eax или lbuffer:win32_find_data, mov [lbuffer].filename,eax
     
  5. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    уже красивее)
    а можно без регистра?
    че-нить типо:
    Код (Text):
    1. mov edi, [WIN32_FIND_DATA].OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Читать Ицзелиона нынче не модно?
     
  7. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    Clerk
    mov win32_find_data.filename[lbuffer],eax - не прет, пробовал, еще до того, как запостить.

    lbuffer:win32_find_data, mov [lbuffer].filename,eax - этого вообще не понимаю. Неговоря уже о компиляторе)

    Asterix
    читал когда-то давным давно. и то не дочитал:-[
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    warsem
    Для начала поймите что вам нужно. mov win32_find_data.filename[lbuffer],eax - это лучший вариант по читабельности, скобки указывают адрес так принято.
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    курите справочник прилагаемый к масму6.11
    там ясно написано что за такие фокусы отвечает директива PTR

    Код (Text):
    1. yobuffer BYTE 10 DUP (0)
    2.  
    3. ...
    4.  
    5. mov (REQSTRUC PTR yobuffer).REQYOFIELD,EAX
    или как вам подсказывали ранее загужаете адрес массива в регистр ассумите его к данной структуре и вперед юзать через регистр

    короче - "читайте прессу"
     
  10. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    Rockphorr
    то, что я хотел)))
    с регистром не нравитца как смотритца)
    спасибо большо)
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    логика такой записи сомнительна - берется относительное от начала структуры смещение и к нему добавляется адрес буфера - естественее для понимания наоборот

    по опыту такого рода записи чувствительны к ключам строгости ассемблирования - убрал режим обратной совместимости и вагон ошибок
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    посмотри как смотрица в бинарнике - увидишь что с регистром лучше
    без регистра в бинарнике (под отладчиком) иногда очень тяжко определить что за поле
     
  13. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    а чем лучше mov eax,[XXXXXXXXh] чем lea esi,[YYYYYYYYh] \ mov eax,[esi+ZZZZZZZZh]?
    или второй вариант в плане оптимизации ловчее?
     
  14. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    типа того
    ну во первых у mov eax,[esi+ZZZZZZZZh] можно почитать и понять что за поле - когда на пропалую сложнее
    во вторых имхо наверно существует несколько инструкций mov eax,[esi+ZZZZZZZZh] в зависимости от длины ZZZZZZZZh хотя в этом я не уверен
    в третьих повторное использование - для массива из буферов можно пользоваться одной функцией а так для каждого элемента бушь писать свою