- 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
ассемблер - источник массы говнокода, классика...
Вполне такой нормальный код :)
Зачемто понадобился адрес 4-й команды (может данные какиенить в сегменте cs лежат, али еще чего такого темного понадобилось сделать).
А нопы - это либо выравнивание, либо остаток от предыдущей комманды (однопроходные компиляторы часто имеют такую особенность, что если пыргаеш вперед по коду (компилятор не знает сколько там байтов впереди) то резервируется место для команды с длинным переходом, потом когда метка куда прыгать всплывает - компилятор уже вставляет нужный вариант перехода и если осталось место - оно все в нопах :) )
Наверно в списке нету асма :)
ща добавим :)
Не ну наглеж. Все языки как языки а ассемблер с маленькой буквы :)
да, надо быть политкорректным
А чо) ... этаж асм...пишешь пишешь, накидаешь 20 строк кода а потом нахрен их)...вот и остаются такие ляпы)
Собственно, слово «ассемблер» это не название конкретного языка программирования (типа Фортран, Форт, Паскаль, Пролог, Си или Java), а просто слово английского технического языка, обозначающее процесс трансляции неких команд в исполняемый код. Потому писать его можно с любой буквы. Дело привычки.
вполне нормальный код. попробуйте погуглить про базонезависимый код.
Ну, nop зачем не знаю, а дальше получение смещения для проги, которая будет висеть по неизвестным адресам в памяти. Нормально. Например для вируса.
Кстати, пример вырванного из контекста кода. Если бы дали строчки 8,9,10 - было бы понятно. И скорее всего не исходник, а дизассемблированный листинг, так как строка 4 должна выглядеть как
BaseAddress:
call somelabel
Потом в SI смещение правильное.
Вообщето, действительно говнокод, так как можно было бы переименовать somelabel в BaseAddress и не городить sub si,3
Когдато сам писал такой код, когда еще были .com файлы, в начале 3 байта jmp на то что аттачнул к файлу, а потом уже все остальное :))
NOP - задержка, никто не писал для микроконтроллеров разве?
Под х86 обычно юзали прерывания BIOS или DOS, непосредственно до оборудования через in/out редко преходилось, поэтому особой надобности в задержках небыло. Только если контроллеру прерывний что сказать. :)) Код, видно по:
pop si
sub si , 3
16-битный, так что сейчас обсуждаем MS-DOS.
Ну код может быть и 32 и 64 битным :)
Это только часть кода, и тут работа идет максимум с 16 битными операндами...
З.Ы. Я такую конструкцию тоже юзал както, в перехватчике винапи вызвов (для дебаговых целей мониторил адрес функции которую перехватил)
А в «x86_64» завезли «RIP-relative» адресацию, и такие трюки стали нинужны.