- 1
- 2
- 3
- 4
- 5
- 6
- 7
nop
nop
nop
call somelabel
somelabel:
pop si
sub si, 3
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−248
nop
nop
nop
call somelabel
somelabel:
pop si
sub si, 3
ассемблер - источник массы говнокода, классика...
guest 08.12.2008 22:10 # 0
Вполне такой нормальный код :)
Зачемто понадобился адрес 4-й команды (может данные какиенить в сегменте cs лежат, али еще чего такого темного понадобилось сделать).
А нопы - это либо выравнивание, либо остаток от предыдущей комманды (однопроходные компиляторы часто имеют такую особенность, что если пыргаеш вперед по коду (компилятор не знает сколько там байтов впереди) то резервируется место для команды с длинным переходом, потом когда метка куда прыгать всплывает - компилятор уже вставляет нужный вариант перехода и если осталось место - оно все в нопах :) )
MAKAKA 15.07.2020 22:20 # 0
guest 09.12.2008 00:18 # 0
Наверно в списке нету асма :)
guest 09.12.2008 07:15 # 0
ща добавим :)
guest 09.12.2008 10:16 # 0
Не ну наглеж. Все языки как языки а ассемблер с маленькой буквы :)
guest 09.12.2008 13:09 # 0
да, надо быть политкорректным
guest 09.12.2008 16:04 # 0
guest 09.12.2008 18:00 # 0
А чо) ... этаж асм...пишешь пишешь, накидаешь 20 строк кода а потом нахрен их)...вот и остаются такие ляпы)
guest 11.12.2008 14:50 # 0
Собственно, слово «ассемблер» это не название конкретного языка программирования (типа Фортран, Форт, Паскаль, Пролог, Си или Java), а просто слово английского технического языка, обозначающее процесс трансляции неких команд в исполняемый код. Потому писать его можно с любой буквы. Дело привычки.
guest 11.12.2008 16:34 # 0
вполне нормальный код. попробуйте погуглить про базонезависимый код.
guest 12.12.2008 15:32 # 0
Ну, nop зачем не знаю, а дальше получение смещения для проги, которая будет висеть по неизвестным адресам в памяти. Нормально. Например для вируса.
guest 12.12.2008 15:44 # 0
Кстати, пример вырванного из контекста кода. Если бы дали строчки 8,9,10 - было бы понятно. И скорее всего не исходник, а дизассемблированный листинг, так как строка 4 должна выглядеть как
BaseAddress:
call somelabel
Потом в SI смещение правильное.
Вообщето, действительно говнокод, так как можно было бы переименовать somelabel в BaseAddress и не городить sub si,3
Когдато сам писал такой код, когда еще были .com файлы, в начале 3 байта jmp на то что аттачнул к файлу, а потом уже все остальное :))
guest 12.12.2008 15:55 # 0
NOP - задержка, никто не писал для микроконтроллеров разве?
guest 12.12.2008 16:21 # 0
Под х86 обычно юзали прерывания BIOS или DOS, непосредственно до оборудования через in/out редко преходилось, поэтому особой надобности в задержках небыло. Только если контроллеру прерывний что сказать. :)) Код, видно по:
pop si
sub si , 3
16-битный, так что сейчас обсуждаем MS-DOS.
guest 14.12.2008 06:21 # 0
Ну код может быть и 32 и 64 битным :)
Это только часть кода, и тут работа идет максимум с 16 битными операндами...
З.Ы. Я такую конструкцию тоже юзал както, в перехватчике винапи вызвов (для дебаговых целей мониторил адрес функции которую перехватил)
guest 07.11.2015 18:31 # 0
cykablyad 24.01.2016 12:00 # 0
guest8 15.07.2020 22:25 # −999
TEH3OPHblu_nemyx 25.03.2019 01:37 # +1
guest8 26.09.2019 20:36 # −999
MAKAKA 15.07.2020 22:30 # 0
gost 15.07.2020 22:44 # +2
А в «x86_64» завезли «RIP-relative» адресацию, и такие трюки стали нинужны.
MAKAKA 15.07.2020 22:51 # 0
bormand 17.07.2020 01:51 # +1
gost 17.07.2020 01:56 # +1
TEH3OPHblu_nemyx 17.07.2020 07:38 # 0
TEH3OPHblu_nemyx 18.07.2020 21:44 # 0