Локальные переменные

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

  1. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    irvin



    Есть более естественные пути :).

    Примерно так:


    Код (Text):
    1.     mov  ESI, 0x200000;
    2.     VirtualAlloc(0,ESI,MEM_COMMIT,PAGE_READWRITE);
    3.  
    4.     lea ESP,[EAX+ESI];   // New Stack
    5.  
    6.     mov [FS:4],ESP;//StackBase        Upper Address
    7.     mov [FS:8],EAX;//StackLimit       Lower Address
     
  2. irvin

    irvin New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2004
    Сообщения:
    14
    2S_T_A_S_



    Когда прога создает очень много тредов с сокетами. С твоим вариантом снронизаця задолбет.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ага, лучше время от времени вываливаться по exception?



    Если стэк небольшой можно ж пробежаться по страницам, пусть виндос сам их подключает:
    Код (Text):
    1.  
    2.     LOCAL buff[4000h]:byte
    3.     mov buff[3000h],eax
    4.     mov buff[2000h],eax
    5.     ..... ; гм.. лучше уж пролог / эпилог переопределить




    И ещё. Зачем это?



    lea esi, buff

    mov [esi], word ptr ':)'



    При стандартном прологе в MASM нужный адрес уже и так в EBP лежит.
     
  4. irvin

    irvin New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2004
    Сообщения:
    14
    Вот в том-то и дело что у меня было с (VirtualAlloc) и "время от времени вываливаться по exception". Потом запихал все в стек и проблема кончилась.



    А пример этот надуманный, реальный тред он очень большой.







    Функция (alloca_probe) это как раз и делает.



    Насчет прологов и эпилогов - еще очень хочется побыстрее чтоб работало.
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    irvin >




    Дык наверное, не вовремя VirtualFree вызывалась..

    У меня VirtualAlloc вызывается для выделения нового стека. Поскольку размер обычного меня иногда не устраевает :).
     
  6. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    S_T_A_S_

    Не, про поименованые области я ничего не говорю - удобно это. А вот proc/endp расслабляет. Локальные метки - это хорошо, но не гибко. Частенько если писать чистый код, можно сильно оптимизировать работу со стеком и пролог с эпилогом. Да и сам алгоритм нехило меняется.. Вобщем, если вы хотите просто писать код на асме, как на сях, то почему не взять си? Лично я на асме пишу для души, а на с++ для всего остального. Поэтому мне глубоко плевать сколько месяцев займет прога - лишь бы интересно было.
     
  7. irvin

    irvin New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2004
    Сообщения:
    14
    2S_T_A_S_







    Спасибо - открыл глаза :))
     
  8. Julius

    Julius New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2003
    Сообщения:
    42
    n0p

    Частенько если писать чистый код, можно сильно оптимизировать работу со стеком и пролог с эпилогом.

    Да с прологом и эпилогом можно не мало поизвращаться.

    Не даром же существуют старые добрые:

    option prologue:xxxx

    option epilogue:xxxx

    В конце концов, писать совсем чистый код на ассемблере не очень удобно. Особенно если речь заходит об обращении к стековым переменным и аргументам функции.
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    n0p >




    Я для этих целей написал набор макросов который мне прсто помагает уйти от кода вроде:



    push [esp+5*4+2*4]



    Как тут на счёт ручного подсчёта? :derisive:



    А вот тут:



    pop [esp+8*4+2*4]



    А теперь вопрос на засыпку: Я добавил push eax перед этими 2мя строчками.

    Не облом ли переписывать цифирки ?



    Нормальные макросы помогают оптимизировать работу со стеком, а не мешают.

    А вручную - вперёд, Оля ждёт =)





    >




    Си меня не устраивает по нескольким причинам: нет возможности использовать fastcall такой, какой хочу я; нет возможности (без извратов) делать так:

    push arg1

    .....

    push argN

    call foo

    db "Im another argument for foo",0

    call bar

    .....



    Асм без макросов не устраивает тем, что слишком часто экран вверх / вниз скроллировать приходится:

    То что я могу поместить в 2х строчках расползается на 2 экрана :-/
     
  10. leo

    leo Active Member

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



    В словаре наткнулся на такой каламбурчик по теме:



    "Let's pop into the local"



    Отгадайте с трех попыток, что это значит. А на разговорном это означает, что-то типа:

    "давай завалимся в нашу пивнушку" (см. Multilex, local I, 5. местная пивная)

    Ха-ха. Ну теперь можно с полным основанием спросить у nOp: "ты ча вааще нашу пивнуху не увжааишшш". А nOp, пивнушку презирает и всех к ebp посылает. При этом сам ничего не "аргументирует" и все уникальным образом "метит". Просто "глобальный уником" какой-то..
     
  11. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    S_T_A_S_

    Не знаю. Мне не в напряг пересчитать. Да и я привык сначало детально продумать алгоритм, а потом атаковать клаву. Таким образом очень редко приходится что-то править и пересчитывать.



    На самом деле, я понимаю, что это достаточно геморно и неудобно, но этим то мне такой подход и нравится! Возможно, я извращенец. Да так и есть, собсно.. :))
     
  12. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    n0p >




    Ну, если ты понимаешь под алгоритмом способы записи команд работы со стеком..

    Хотя ты же писАл, что асм для тебя просто развлечение..
     
  13. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Ну да, развлечение. Один фиг, на работу устраиваться надо только С++сником, а иначе и работы-то не найти.. :) А для вас асм не развлечение? С ним связана профессиональная деятельность?
     
  14. irvin

    irvin New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2004
    Сообщения:
    14
    Господа, а как правильно по английски пишется слово флейм?
     
  15. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Flame
     
  16. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Это ты о том, что мы отклонились от темы "Локальные переменные" слегка? :)
     
  17. leo

    leo Active Member

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

    По большому счету я с тобой согласен. Сам использую асм только в виде вставок и разумеется без всяких "фенек". НО, "развлечение" вижу только в оптимзации быстродействия и "красоте" кода, и уж никак не в расчете смещений. И уж тем более рекомендовать такой подход всем, особенно начинающим - это чересчур..
     
  18. Asterix

    Asterix New Member

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

    > Flame



    Пламя? :derisive:
     
  19. irvin

    irvin New Member

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



    "Мусорный ветер":)))
     
  20. irvin

    irvin New Member

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




    му - му

    Ну выступи еще - может мне тоже будет смешно:)

    му - му - му - му!!!