Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm: Общие вопросы > Что делает этот код??? |
Автор: neutrino 4.6.2006, 17:58 | ||
Приветствую! Вот код:
В чем смысл этого кода? И если он есть, то как эту процедуру вызывать (имеется в виду какие действия нужно выполнить до ее вызова)? |
Автор: rsm 4.6.2006, 18:35 | ||
Особого смысла в этом коде нет: - возврат из функции происходит по адресу на 8 байт дальше оригинального адреса возврата; - возвращаемое значение это лишь сумма байт, составляющих машинный код, расположенный по адресу возврата плюс следующие за ним 4 байта; Есть мнение, что появление этого кода есть либо результат оптимизации компилятором, либо замысел разработчика, имеющий цель и смысл только для него. Никаких особых условий по вызову нет - аргументов функция не имеет, локальных переменных в ней тоже нет. |
Автор: DrLazy 4.6.2006, 18:39 |
Все проще ![]() int YourFunction( int *ptr ) { return *ptr++ + *ptr++; } Added: Виноват, ошибся. вот если бы было 6[ebp] , тогда да.... |
Автор: rsm 4.6.2006, 19:00 | ||||
И даже не 6, а 8. Потому что первый аргумент функции начинается с ebp+8. neutrino, как вариант, функцию можно использовать для контроля целостности кода примерно так:
|
Автор: DrLazy 4.6.2006, 20:13 |
Ну в обем да ![]() ![]() Причем я так предполагаю что адрес вызова + 8 окажется гдето посередине инструкции. Опять таки защита от дизасма ![]() |