eXeL@B —› Вопросы новичков —› Программа без использования стека |
Посл.ответ | Сообщение |
|
Создано: 18 июня 2015 00:03 · Личное сообщение · #1 Вот призадумался над такой вещью: допустим стек, в привычном понимании не существует (что-то типа naked для всех процедур программы). У нас есть какая-то область памяти, где стандартными командами MOV [const], reg32(и т.п.) мы ведем обмен данными. Много ли мы выгадаем по отмизации от освободившихся регистров ESP, EBP? Я, кстати, не видел ни разу, чтобы в протекторах были подобные трики. |
|
Создано: 18 июня 2015 00:07 · Личное сообщение · #2 |
|
Создано: 18 июня 2015 00:33 · Личное сообщение · #3 hello пишет: Я, кстати, не видел ни разу, чтобы в протекторах были подобные трики. а что в этом необычного? делать свой "стек" для обмена данными между процедурами прежде всего нужно для удобства в некоторых случаях, например, свой call 007F2064: Code:
007F26A0 007F26B0 это временные ячейки для хранения данных для корректного возврата при различных манипуляций с патч-кодом в секции с атрибутами rwe. предполагаю, что запись в регистр проца быстрее, чем в память. ----- Array[Login..Logout] of Life |
|
Создано: 18 июня 2015 00:42 · Поправил: dosprog · Личное сообщение · #4 )) Фух. Так речь идёт о перестановке ESP на свой собственный стек.. Витиевато однако. Регистр EBP использовать никто не заставляет, с ним просто удобнее, - а ESP всё равно не должен указывать куда попало. Это делалось в обязательном порядке в резидентных DOS-программах, чтобы не разрушить чей-нибудь стек при работе резидента. Также это применялось в различных DOS-защитах для противодействия отладке. Например: Code:
В WIN32-программах такие выверты от отладки не спасут. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 18 июня 2015 07:29 · Личное сообщение · #5 Вообще тема довольно забавная. Kindly пишет: делать свой "стек" для обмена данными между процедурами прежде всего нужно для удобства в некоторых случаях Я в одной проге, для себя тоже так делал свой стек с блекджеком и ... Сравнительно давно эт было. Еще добавлял, что-то типа: Code:
Такое отсуствие здравого рассудка, запутывало Иду и вводило в некоторый ступор Hex-Rays |
|
Создано: 18 июня 2015 10:49 · Личное сообщение · #6 |
|
Создано: 18 июня 2015 12:34 · Личное сообщение · #7 |
|
Создано: 18 июня 2015 12:40 · Личное сообщение · #8 hello пишет: Да, но ведь можно обойтись без CALL А если внутри Call находятся десятки саll как ты будешь выкручиваться? hello пишет: JMP [ESP] Значит ты уже что то вписал в стек а я яй а ведь hello пишет: Программа без использования стека ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 18 июня 2015 13:23 · Личное сообщение · #9 hello Ещё раз: любой внешний вызов, типа винапи, будет ожидать аргументы, как и адрес возврата, в стеке. Не говоря об исключениях, вызовах из ядра, типа APC и тд. И не пытайтесь рассказать, что будете писать хоть сколько-нибудь серьёзное приложение без этого всего. Не говоря о том, что при множестве вложенных call для хранения всей цепочки адресов возврата ты изобретёшь свой стек с квадратными колёсами. | Сообщение посчитали полезным: ullf |
|
Создано: 18 июня 2015 16:45 · Личное сообщение · #10 Archer пишет: будет ожидать аргументы, как и адрес возврата, в стеке. Да это понято. Тут согласен. Я имею ввиду, прежде всего, замену стека в большинстве главных фунок программы. А критические вызовы WinAPI пусть юзают стек. ClockMan пишет: Значит ты уже что то вписал в стек а я яй а ведь ESP, в данном случае, указывает на секцию. text |
|
Создано: 19 июня 2015 21:56 · Личное сообщение · #11 |
|
Создано: 19 июня 2015 22:46 · Личное сообщение · #12 motoroller пишет: напишете ось для того, чтобы вообще стек не юзать По крайней мере, это может использоваться для всяких протекторов,чтобы ослеплять существующие анализаторы.способ конечно дурной, но с оглядкой на говностарфорс, всяко может быть. motoroller пишет: толку нуль. призводительность не возрастет Самый оптимальный вариант освободившегося лишнего регистра ESP -в долгих циклах, но не слишком длинных. И без использования внешних вызовов WinAPI. Я понимаю, что это некоторый бред, но кто его знает, что станет трендом лет через пять |
|
Создано: 19 июня 2015 23:39 · Поправил: dosprog · Личное сообщение · #13 hello пишет: И без использования внешних вызовов WinAPI. Вообще без вызовов процедур. hello пишет: но кто его знает, что станет трендом лет через пять Это - не станет. Было уже лет ..надцать назад ClockMan пишет: Самый оптимальный вариант перевести код( и то не весь) на FPU регистры...... Ну вот, ещё наУчите .. |
|
Создано: 20 июня 2015 00:44 · Личное сообщение · #14 |
|
Создано: 20 июня 2015 07:20 · Личное сообщение · #15 |
|
Создано: 25 июня 2015 09:26 · Личное сообщение · #16 На некоторых других процессорах можно избавиться от стека полностью, в непривилигированных режимах... А так, чтобы избавиться на x86/x64 полностью от стека - невозможно! Если только свою ось изобребсти, и то стека не будет только лишь в юзермоде! ) ----- IZ.RU | Сообщение посчитали полезным: TLN |
eXeL@B —› Вопросы новичков —› Программа без использования стека |