- 1
- 2
call LABEL
LABEL: pop eax
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129.5
call LABEL
LABEL: pop eax
Получение адреса текущей инструкции убийственным для производительности методом.
temoto 11.08.2009 15:00 # +1
guest 12.08.2009 15:26 # +1
inkanus-gray 03.06.2016 12:10 # 0
А pop eip никогда не было.
temoto 11.08.2009 15:00 # 0
OlegD 11.08.2009 16:37 # 0
temoto 12.08.2009 16:12 # 0
OlegD 12.08.2009 16:48 # 0
LABEL: mov eax, [esp]
ret
call LABEL
guest 12.08.2009 23:59 # 0
OlegD 13.08.2009 00:26 # 0
guest 27.04.2011 07:34 # 0
guest 19.08.2009 18:49 # 0
OlegD 20.08.2009 00:14 # 0
guest 21.08.2009 18:10 # 0
guest 16.09.2009 17:55 # 0
guest 26.08.2009 00:56 # 0
guest 25.11.2009 01:58 # +4
Если сегменты имеют нулевые базы, то ситают что сегментации нет; если загрузчик правит адреса из релоков, то считается что база фиксирована, а адрес не является смещением в сегменте.. идти изучать матчасть, а дельфе, скрипты и остальнй шлак фтопку!
Касательно быстродействия.
1. Так как афтор явно нуб, как следствие иму не изветны кольца защиты в IA. Раз так, то данный код исполняется в 3-м кольце защиты, тоесть при включённом планировании(разрешённых прерываниях). А это значит что похую конвеер и прочая оптимизация. Поток может завершить свой квант времени на инструкции LABEL. Это железо прерывание сгенерит, например системный таймер. А то время, в течении которого он будет простаивать огромно, камень могбы выполнить тысячи подобных блоков.
2. Стек обычно расширяется. Тоесть Call LABEl может вызвать обращение к сторожевой странице стека, если его дно находится на границе страниц. В этом случае возникнет исключение, ось расширит стек, на что также требуется время.
3. Подкачка. Память то подкачиваемая. Хуяк - и сраницы не, менеджер её отгрузил в своп. Вот пока он её оттуда достанет уйдёт значительное время.
-
Так что про подобную оптимизацию в условиях мультизадачность говорить бессмысленно. Если это код для исполнения на какомто контроллере, то там нет к примеру предскозания ветвлений и без разницы, что эта пара инструкций, что есчо стопяцот между ними.
guest 01.12.2009 02:10 # +1
Webkill 11.06.2010 23:35 # −6
guest 27.04.2011 11:20 # 0
guest 27.04.2011 11:22 # 0
guest 27.04.2011 11:39 # 0
istem 27.04.2011 11:59 # 0
guest 20.09.2009 01:02 # 0
guest 29.09.2009 13:35 # 0
guest 17.12.2009 14:55 # 0
LuCiFer 29.12.2009 15:56 # 0
mov rax, rip
в rax будет указатель на следущую команду.
guest 12.01.2010 17:29 # +3
guest 31.05.2010 17:34 # 0
inkanus-gray 11.06.2010 23:30 # +1
Конструкция же CALL LABEL / LABEL: pop eax никаких фиксапов не генерирует. В Линуксе она используется для создание позиционнонезависимого кода (PIC). Он с одной стороны обходится без фиксапов, с другой стороны может грузиться куда угодно. Линуксоиды, поправьте меня, если я ошибся!
Говногость 12.06.2010 11:01 # 0
inkanus-gray 12.06.2010 13:50 # +1
Реально код CALL/POP необходим вирусмейкерам, поскольку добавление ссылок на свой код в таблицу релокейшнов — лишняя задача. Почему в Линуксе такой вирусоподобный код сделали стандартом для SO-библиотек, я не знаю.
Похоже, что боязнь фиксапов (в Windows — программы для фиксированных адресов, в Линуксе — конструкции CALL/POP) — это ностальгия по эпохе COM-файлов.
bugmenot 28.04.2011 22:25 # 0
Говногость 12.06.2010 13:41 # +2
guest 27.04.2011 00:00 # 0
guest 28.04.2011 14:54 # 0
На бошорг, однозначно :lool: Олег, внимательнее маны читай и не пости ерунды. А если сомневаешься, то всегда можно написать пару тестовых программ и сделать замеры. Но я съэкономлю тебе время - разницы не заметишь.
guest 28.04.2011 14:58 # +2
DemonId7 28.04.2011 19:01 # 0
Тормозов такая смена верхушки стека не вносит. Процессоры не настолько тупы, чтобы не заметить подмены и не принять соответствующих мер. В конце-концов, игры со стеком свойственны и ЯВУ, особенно при обработках различных исключений.
Govnocoder#0xFF 28.04.2011 19:03 # 0
DemonId7 28.04.2011 21:51 # 0
guesto 03.06.2016 13:58 # 0
гг
напоминает как челы в жабе кидали exception и сразу ловили чтобы узнать текущий стек трейс