- 1
- 2
- 3
- 4
- 5
; Program entry point
00401000: push 0070F001
00401005: call 0040100B
0040100A: ret
0040100B: ret
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+225
; Program entry point
00401000: push 0070F001
00401005: call 0040100B
0040100A: ret
0040100B: ret
Суровый старт зашифрованного самораспаковывающегося архива. Так хитро передаётся управление на 0070F001 (за сегмент кода).
Можно и так?
00401000: push 0070F001
00401005: call 0040100A
0040100A: ret
--
И почему, в обоих случаях, нельзя использовать счётчик команд?.. (вопрос)
Хм, похоже, так и нужно. Хотя есть же jmp 0070F001.
> почему, в обоих случаях, нельзя использовать счётчик команд?
Дело в хитрожопом 3-битном кодировании регистров: Для EIP не нашлось места. Ну и еще, например, команда mov eip, <src> была бы посложнее обычной записи в регистр.
> Для EIP не нашлось места.
:) весело.
Значит с усложнением архитектуры процессоров более лояльнее, использование высокоуровневых языков, либо всеобщая глобальная процессоростандартизация.
Это вряд ли :)
К счастью, её вскоре отменили.
кстати, у этого чувака нет винрарнейшего справочника Ralf Brown's Interrupt List
Теперь в х64 есть доступ к EIP. :)
JMP ptr16:32
Jump far, absolute, address given in operand
Как бы:
Но здесь же несколько иная ситуация, не?
?
1. Что-нибудь сгенерированное языками высокого уровня.
2. Дурилка для отладчика.
Просто я захотет поковырять самоархиватор, требующий у меня СМС и сразу напоролся на такой прикол.
если руками -- сам же запутается
можно еще набить в стек 42 адреса и 8 раз сделать рет
Кажется я понял, о чем он))
Да. В Ass, конечно, юзаются.))