irvin Есть более естественные пути . Примерно так: Код (Text): mov ESI, 0x200000; VirtualAlloc(0,ESI,MEM_COMMIT,PAGE_READWRITE); lea ESP,[EAX+ESI]; // New Stack mov [FS:4],ESP;//StackBase Upper Address mov [FS:8],EAX;//StackLimit Lower Address
Ага, лучше время от времени вываливаться по exception? Если стэк небольшой можно ж пробежаться по страницам, пусть виндос сам их подключает: Код (Text): LOCAL buff[4000h]:byte mov buff[3000h],eax mov buff[2000h],eax ..... ; гм.. лучше уж пролог / эпилог переопределить И ещё. Зачем это? lea esi, buff mov [esi], word ptr '' При стандартном прологе в MASM нужный адрес уже и так в EBP лежит.
Вот в том-то и дело что у меня было с (VirtualAlloc) и "время от времени вываливаться по exception". Потом запихал все в стек и проблема кончилась. А пример этот надуманный, реальный тред он очень большой. Функция (alloca_probe) это как раз и делает. Насчет прологов и эпилогов - еще очень хочется побыстрее чтоб работало.
irvin > Дык наверное, не вовремя VirtualFree вызывалась.. У меня VirtualAlloc вызывается для выделения нового стека. Поскольку размер обычного меня иногда не устраевает .
S_T_A_S_ Не, про поименованые области я ничего не говорю - удобно это. А вот proc/endp расслабляет. Локальные метки - это хорошо, но не гибко. Частенько если писать чистый код, можно сильно оптимизировать работу со стеком и пролог с эпилогом. Да и сам алгоритм нехило меняется.. Вобщем, если вы хотите просто писать код на асме, как на сях, то почему не взять си? Лично я на асме пишу для души, а на с++ для всего остального. Поэтому мне глубоко плевать сколько месяцев займет прога - лишь бы интересно было.
n0p Частенько если писать чистый код, можно сильно оптимизировать работу со стеком и пролог с эпилогом. Да с прологом и эпилогом можно не мало поизвращаться. Не даром же существуют старые добрые: option prologue:xxxx option epilogue:xxxx В конце концов, писать совсем чистый код на ассемблере не очень удобно. Особенно если речь заходит об обращении к стековым переменным и аргументам функции.
n0p > Я для этих целей написал набор макросов который мне прсто помагает уйти от кода вроде: push [esp+5*4+2*4] Как тут на счёт ручного подсчёта? А вот тут: 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 экрана :-/
Прикол for all В словаре наткнулся на такой каламбурчик по теме: "Let's pop into the local" Отгадайте с трех попыток, что это значит. А на разговорном это означает, что-то типа: "давай завалимся в нашу пивнушку" (см. Multilex, local I, 5. местная пивная) Ха-ха. Ну теперь можно с полным основанием спросить у nOp: "ты ча вааще нашу пивнуху не увжааишшш". А nOp, пивнушку презирает и всех к ebp посылает. При этом сам ничего не "аргументирует" и все уникальным образом "метит". Просто "глобальный уником" какой-то..
S_T_A_S_ Не знаю. Мне не в напряг пересчитать. Да и я привык сначало детально продумать алгоритм, а потом атаковать клаву. Таким образом очень редко приходится что-то править и пересчитывать. На самом деле, я понимаю, что это достаточно геморно и неудобно, но этим то мне такой подход и нравится! Возможно, я извращенец. Да так и есть, собсно.. )
n0p > Ну, если ты понимаешь под алгоритмом способы записи команд работы со стеком.. Хотя ты же писАл, что асм для тебя просто развлечение..
Ну да, развлечение. Один фиг, на работу устраиваться надо только С++сником, а иначе и работы-то не найти.. А для вас асм не развлечение? С ним связана профессиональная деятельность?
nOp По большому счету я с тобой согласен. Сам использую асм только в виде вставок и разумеется без всяких "фенек". НО, "развлечение" вижу только в оптимзации быстродействия и "красоте" кода, и уж никак не в расчете смещений. И уж тем более рекомендовать такой подход всем, особенно начинающим - это чересчур..