Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уродский вопрос про параметры функций 
:(
    Опции темы
SomeNoOp
Дата 19.7.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



Доброе время суток! Извините за столь уродский вопрос, но почему если при вызове какой-нибудь функции нужно в параметре указать 0, то в стек забивают не 0, а регист, равный нулю. Это что-то дает? Иными словами я про разницу между:

push 0
call Function

и:

xor eax, eax
push eax
call Function

PM MAIL   Вверх
ILyAHA
Дата 19.7.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

Репутация: нет
Всего: 3



А где ты нашел этот уродский код? smile 
Если у процедуры нет параметров, то и в стэк ничего не надо ложить.
--------------------
<sсriрt>alert('xss')</sсriрt>
PM MAIL   Вверх
spin2
Дата 19.7.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

Репутация: нет
Всего: 31



Потому что в стек можно положить либо значение регистра, либо значение ячейки памяти...


--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
SomeNoOp
Дата 19.7.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



А разница какая? Быстрее работает? Меньше места занимает? Если бы 0 был ячейкой памяти, то разница была бы очевидна, но ведь 0 это не адрес ячейки памяти, это константа. Или я не прав?

Это сообщение отредактировал(а) SomeNoOp - 19.7.2007, 19:24
PM MAIL   Вверх
ILyAHA
Дата 19.7.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

Репутация: нет
Всего: 3



Извиняюсь за чуш которую написал в начале. Непонял вопроса  smile 

Цитата

xor eax, eax
push eax


Здесь используется низкоуровневая оптимизация.

В книге Зубкова написано так:
Цитата

Используйте регистр ЕАХ всюду, где возможно. Команды с непосредственным операндом, с операндом — абсолютным адресом переменной и команды XCHG с регистрами занимают на один байт меньше, если другой операнд — регистр ЕАХ.


Набор этих команд дает оптимизацию выполнения на 10-20%.

А вообще почитай книгу Зубкова -  Assembler для Dos, Windows и Unix
--------------------
<sсriрt>alert('xss')</sсriрt>
PM MAIL   Вверх
ILyAHA
Дата 19.7.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

Репутация: нет
Всего: 3



А вообще
Цитата

push 0

лучше неписать
Некоторые ассемблеры, например masm, могут воспринять это как ошибку.

Это сообщение отредактировал(а) ILyAHA - 19.7.2007, 20:05
--------------------
<sсriрt>alert('xss')</sсriрt>
PM MAIL   Вверх
SomeNoOp
Дата 20.7.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



Исчерпывающе, всем спасибо!
PM MAIL   Вверх
setty
Дата 20.7.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 8.6.2006
Где: Украина

Репутация: нет
Всего: нет



ниразу масм не выдавал ошибки по поводу использования push 0 (2 байта)
использованием же 
xor eax, eax        2 байта
push eax        1 байт
можно выиграть в размере при вызовах функции где больинство параметров должно иметь нулевое значение
к примеру 
Код
        push    offset pinf        ;lppiProcInfo
        push    offset sinf        ;lpsiStartInfo
        push    eax            ;lpszCurdir
        push    eax            ;lpvEnviroment
        push    eax            ;fdwCreate
        inc    eax
        push    eax            ;fInheritHandles = yeah
        dec    eax
        push    eax            ;lpsaThread
        push    eax            ;lpsaProcess
        push    edi            ;lpzszCommandLine "cmd.exe"
        push    eax            ;lpszImageName 
        call    CreateProcess


однако выигрышь довольно скромен ) 
PM MAIL   Вверх
SomeNoOp
Дата 23.7.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



Действительно скромен, но все-таки он есть (=. Как я понел, если в функцию нужно передать параметры и только в ожном из параметров нужно передовать 0, то выгоднее писать push 00h, чем xor eax, eax push eax. Это правда?
PM MAIL   Вверх
W4FhLF
Дата 23.7.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Цитата(SomeNoOp @  23.7.2007,  20:20 Найти цитируемый пост)
Это правда?


Что значит выгоднее? В плане размера? Почему бы не проверить самому?

Код

33C0            XOR EAX,EAX
50              PUSH EAX
50              PUSH EAX


Код

6A 00           PUSH 0
6A 00           PUSH 0
...


Как видишь, выгода начинается с 3х и более параметров. 

Это сообщение отредактировал(а) W4FhLF - 23.7.2007, 20:41


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.