- 1
huiX5uiPH5;;P5;@@5HH4XPPDXDPhuiX5fiTГ
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
huiX5uiPH5;;P5;@@5HH4XPPDXDPhuiX5fiTГ
Было запощено в 11315, но, мне кажется, что этот ГК заслуживает отдельного топика.
Когда-то давно пытался на ассемблере включить видеорежим 320x200x256 (13h) и порисовать. Но XP сменив режим потеряла управление. Помог только ребут. В тот день, матерясь на MS, я и решил написать эту строчку так, чтобы ее можно было вводить с помощью обычного блокнота на любой машине...
Системные требования: Windows XP
Текст набирается в кодировке CP1251. Файл должен иметь расширение COM.
И да, повторяющееся "hui" символизирует.
Да нет, довольно безобидный код. Перезагрузка помогает.
> И да, повторяющееся "hui" символизирует.
Ну надо было выбрать 2 произвольных байта, чтобы занулить регистр ax. Но так как первый байт push выглядит как h, остальные буквы пришли сами собой...
Забавно было бы сделать компилятор с какого-нибудь несложного ЯП в опкоды из диапазона ascii.
Как неуклюже! Есть же debug для этого
наркоманская каптча как бы одобряет использование winword для ввода опкодов
С таким методом написания не нужно искать текстовое представление восьмеричной системы счисления. Код сразу готов к употреблению.
В копилку: com2txt.
Но старый SMTP, и (кажется UUCP) и местами FIDO и многие другие сети пропускали нормально только 7-bit текст.
Буква Н в Фидо же. "Белосежка и семь гомов, я улетаю прямо в ебеса" итд
Про чудовищную книгу о чудовищах закодированный декодер:
http://web.archive.org/web/20060104134716/www.kiarchive.ru/pub/msdos/convert/bin2text/uudecode.txt
Дальше идёт payload в кодировке UUE.
верните мой 1997-й...
>> Сохраните как UUDECODE.DOC и прочтите
ахахаха
Даже сейчас можно вбить в гугл "kiae.su site:citforum.ru" и умилиться
Это про шлюз в FTP из почты:)
Ща погуглил: да, верно помню. Ache там работал еще....
ftp://ftp.sac.sk/pub/sac/utilfile/comt010d.zip
Ссылка живая, в архиве есть даже исходники.
-1 сжимает во что-то типа WCT (в payload заглавные латинские буквы)
-3 сжимает во что-то типа base64 или UUE (в payload разные ASCII-символы).
Я вижу какой-то "hui"
Дизассемблируем подпрограмму:
Вероятно, Борманд хотел, чтобы подпрограмма завершалась кодом C3 (retn), но получилось C4, поэтому программа падает.
В чистом ДОС или в других эмуляторах (не NTVDM) программа просто свалится с исключением Invalid Opcode.
ух ты, быстро работает наверное.
Как можно получить инвалида опкода в программе под ntvdm?
Надо специально скопелировать real time программу под ntvdm? типа ты знаешь что ее будут запускать под windows, но пишшеь специльно под дос? серьезно? это надо что с собой сделать?
А в виртуальной дос-машине Windows 95/98/Me были дополнительные функции DOS, которые предоставляли доступ к длинным именам файлов (их предоставлял vfat.vxd) или ко всякой фигне типа изменения заголовка окна консоли.
А в OS/2 тоже были какие-то дополнительные функции для досовских программ, запущенных в окне...
А в борландовских паскалях и сях была эмуляция опкодов 8087, если математический сопроцессор отсутствовал: там был вызов какого-то прерывания, которое подглядывало на следующие два байта в коде за инструкцией INT (чтобы не засорять регистры).
Эмуляцию ФПУ я помню, там была опция такая у копелятора. В те далекие времена яне думал как она работает, просто знал что у мну есть FPU и всё
ps:
>или ко всякой фигне типа изменения заголовка окна консоли.
так ansi.sys же и ESC последовательнсоте, не?
https://www.google.com/search?q=c4+c4+ntvdm
Я наткнулся на эту фигню, когда пытался дизассемблировать com-файлы из System32 какой-то Windows NT (уже не помню, какой).
За пределами стандартных утилит Windows NT такой опкод нигде не встречается.
16битные файлы лежали в папке system32, и это логично потому что у меня сейчас там лежат 64битные файлы, а 32х битные лежат в wow64
Как досовский ansi.sys изменит заголовок окна, если у него нет доступа к WinAPI? Вот единственный шлюз был через доп. функции DOS с большими номерами. А до ansi.vxd тогда не додумались.
что мешало ntvdm рожать такие же окошки и потом:
1) приложение -> NTVDM (пишет в stdout посредством DOS int. \033...)
2) NTVDM -> ядру (через native API) "поменяй мну зоголовко"
зы: ansi.sys тут не причем конечно, потому что строго говоря заголовков в обычные мониторы пока не завезли)
но все равно можно было так сделать
В MS умудрились даже на протяжении нескольких лет одновременно поддерживать ветки NT и не-NT, в которых всё сделано по-разному, и только потом отказались от не-NT.
его вроде включали когда-то чтобы упростить портирование прыщеговна видимо, но потом отказались и теперь опять у нас только ConsoleAPI.
А ветки долго поддерживали: NT 3.51 вышел лет за 10 до полного перехода всего на Win2k/WinXP.
И даже там поддерживают до сих пор НЕ юникодные функции чтобы работали win9x аппы.
Обычно Pituh этомакрос который резолвится в PituhA если не установлен UNICODE и в PituhW если установлен
Очевидно что PituhW есть во всех WinNT
Получается такая же схема, как у c4 c4 в ntvdm и как у борландовского эмулятора FPU.
>>
>> which is the reason why Intel had to disable VEX instructions in 16-bit real and virtual mode
Значит, кроме 16-битных микрософтовских программ этот опкод (для сиськола «BOP», не для «VEX») нигде не использовался. Я, конечно, допускаю, что в 32-битном коде «Штеуд» всё-таки оставил «VEX», сломав совместимость со старым микрософтовским кодом, иначе будет совсем печально. Но пока кроме микрософтовских утилит, предназначенных для «NTVDM», я «BOP» не встречал. Либо плохо искал...
%DDK%\inc\ddk\isvbop.h:
кстати, почему никто не тыкнул меня в то, что я real mode обозвал real time?
Значит, NTVDM умеет генерировать 16-битные трамплины для вызова DLL из досовской программы реального режима. Где бы ещё найти требования для этой dispatch routine, которую он будет вызывать...
http://www.cyberforum.ru/post2903586.html
у меня таокй же был на win95 когда я поставил Microsoft Plus:)
надоже другую .dllку сунуть , чтоб SxS в другную дллу порезолвился
с другими кококококококпонентами?
Посмотрим, что у его программы на самом деле в этих регистрах...
ES=DS=CS, ибо COM-файл; SI, DI, BX содержат мусор, ибо он их не трогал (есть подозрение, что SI=100h, значит, DS:SI указывает на huiX5uiPH5;;P5;@@5HH4XPPDXDPhuiX5fiTГ — вот такое некрасивое название DLL получилось. И NTVDM попытается эту DLL найти...
RegisterModule() вызовется, только если после C4 C4 есть байт 58 (hex).
А тут вообще произойдёт вызов неизвестного сервиса. В isvbop.h такого нет. Зато есть такие:
где #define BOP_UNSIMULATE 0xFE
https://i.imgur.com/SkJNFH1.png
«El DOS no documentado»
Больше нигде BOP_DOS, BOP_WOW, BOP_XMS, BOP_DPMI, BOP_CMD, BOP_DEBUGGER, BOP_REDIR, BOP_NOSUPPORT, BOP_GRABTIMER, BOP_KBD, BOP_VIDEO, BOP_NOTIFICATION, BOP_UNIMPINIT, BOP_SWITCHTOREALMODE не гуглятся.
Полагаю что MS дали документацию только паре клиентов которые хотели развивать свое 16ти битное говно под NT и не стали публиковать документацию чтобы не провоцировать новых разработок
Мне трудно учавствовать в гонке, бо все доступные мне винды уже оче давно 64х битные
ты мне предланаешь двухтонник на DOSBOX поставить?
Я чото сомневаюсь что DOSBOX умеет эмулировать нормальный защищенный режим со страницами, PnP bios и прочие нужные вещи
Для загрузки двухтонника нужно использовать что-нибудь помощнее (QEMU, Bochs, VMware, Virtual Box, Virtual PC).
Что там?
http://web.archive.org/web/20040401115821/www.kuro5hin.org/story/2004/2/15/71552/7795
http://www.hulver.com/scoop/story/2004/2/14/54256/0849
Могу что-нибудь выдрать, если заинтересовало.
Судя по #ifdef VXD, это код не для NT 4.0, а для Windows 95. А судя по #if 0 перед _asm, что-то пошло не так.
А вот вариант кода для NT:
VZNNXPH555750K4PP5DM3D01D0X5AC3D21D2XP559550K4
Собираем в конце программы знак доллара, int 21h; retn. Перед этим заполняем ah номером функции и dx адресом строки (100h = адрес самого исполняемого образа).
http://citforum.ru/programming/windows/machine_code/3.shtml
http://citforum.ru/programming/windows/machine_code/4.shtml
Потребуются только текстовый редактор, cmd.exe и debug.com. Больше всего времени занимает ввод PE-заголовка.
Оказывается, есть и другие примеры такой технологии:
https://en.wikipedia.org/wiki/Fat_binary
ELF, содержащий секции для разных систем, это, конечно, круто, но ничто не сравнится с комбинированным файлом для DOS (x86) + CP/M (8080).
Интересно, где ещё можно что-то подобное реализовать.
Windows NT 4.0 поддерживала довольно странные платформы (MIPS, Alpha, Power PC), но в ней была NTVDM. Досовские программы для x86 на этих платформах выполнялись через эмулятор процессора (Soft PC). В «двухтоннике» поддержку MIPS, Alpha, PPC решили прекратить, а поддержку AMD64 и Итаниума к официальному выпуску завершить не успели, поэтому Soft PC выкинули и во всех более новых Windows NTVDM не умеет эмулировать процессоры.
NTVDMx64 собрали из спизженных исходников NT 4.0, в которых ещё был Soft PC, но пропатчили их для совместимости с API Windows 7.0 и Windows 10 (на Windows 8 и 8.1 запускается бинарник для десятки).
http://www.columbia.edu/~em36/ntvdmx64.html
Ты опять вышел на связь?
Пиздарики
>>
Не проецируй обрыганный совок на Америку чей флаг можно увидеть
На правах вброса:
http://www.falsehood.me/
Только сильно не зачитывайся, а то окажешься в дурке.
Наверное, премиум-аккаунт нужен.
По которым твоих родственников отвозили на мыловаренную фабрику. Куууик )))
В 1940 году в Германии его мечта сбылась: он стал отличным дипломатом. И парой перчаток.
Чтобы в неё без проблем пролезали очистки, тряпки и прочая хуйня? Без этого дерьма то она нормально работает.
Тут у чувака "Марио" запустился, правда, не с первого раза:
https://github.com/leecher1337/ntvdmx64/issues/23#issuecomment-372244996
А я сделал несколько попыток, только чёрный экран. В текстовых режимах работает, графику не хочет. Даже не знаю, где может быть неполадка.
Запускаю из explorer.exe — текстовый режим работает, в графическом чёрный экран.
Запускаю из cmd.exe — работают любые видеорежимы, но не с первого раза.
Запускаю из command.com в интерактивном режиме — выскакивает MessageBox, что 64-битные Windows не поддерживают 16-битные файлы.
Запускаю через command.com /c имя_программы.exe — стабильно включается нужный видеорежим.
NTVDMx64 пытается пропатчить память процесса, но при некоторых условиях ему это не удаётся. Похоже на это:
https://ru.wikipedia.org/wiki/Состояние_гонки
Dosbox неудобен тем, что его нужно запускать специально, из него нельзя запустить виндовую программу, короче, полная изоляция.
После установки же ntvdmx64 досовские программы запускаются одним кликом даже из современных 64-битных систем.
Ах вот оно что. Что значит по умолчанию?
Её нужно ставить вручную. Кроме того, сейчас она нарушает авторские права, ибо основана на OpenNT (из Гитхаба OpenNT удалили в 2016 году, но до сих пор можно найти его копии), который в свою очередь основан на утёкших исходниках Windows NT 4.0.
Официально Microsoft ещё в Windows XP отказался от ntvdm в 64-битной версии (у Windows 2000 64-битную версию выпустить не успели).
Но они бы могли к 64-битной Винде прицепить эмулятор, который у них был в NT4 для других процессоров. Кстати, HAL в 64-битной Винде содержит эмулятор реального режима x86, чтобы можно было использовать функции BIOS.
зачем? Я думаю они рады были выкинуть этот код, представляешь какая боль ево поддерживать?
>>BIOS
да, мне кажется тут про это уже рассказывали) но там какая то урезанная мумуляция
В принципе WSL это реализация сисколов лялиховых поверх NT ядра, так что туда можно любой userspace лялиховый завести, хоть слаку хоть генту
редкий юникс умел
Кста, товарищу выше отвечаю: IBM забил еще и на свой unix Тоже ради линукс, вообще кроме солярок и бздей больше и юниксов то не осталось кроме линукса
Linux Не юникс бо писан с ноля и кода юникс не содержит
BSD, AIX, HP-UX, IRIX, Solaris, SunOS, SCO — монолитное ядро (у некоторых с загружаемыми/выгружаемыми модулями).
Plan 9, NextStep, Darwin — гибридное ядро.
Микроядро только у QNX, у Minix и у недописанного Hurd.
Танненбаум проиграл что ли?
дебаты_линуса_и_таненбаума.txt
Кста, Darwin прошел сертификацию SUS
>> В «двухтоннике» поддержку MIPS, Alpha, PPC решили прекратить, а поддержку AMD64 и Итаниума
Все верно, только AMD64 к релизу 2k еще не было, а рассказами про то, что скоро станет Itanium пронизана вся windows 2000 Internals. Тогда все верили что скоро настанет
Интересно, как именно это работает? Процессор выполняет 32битный код, внутри которого крутится эмулятор? Создает ли Exectutive объект PRocess и структуру EPROCESS? Создает ли ядро KPROCESS? Если так, то процесс виден в диспетчере задач и даже честно шедулится)
В 10 есть еще PicoContainers (проект Drawbridge): через него реализовали WSL, позволяющий запускать даже вообще не PE:)
Ну ещё напомню про os2ss и posixss в NT до 2К включительно.
Kernel32!CreateProcess читал заголовок, и видя что там posix дергал posixx.exe, а видя что там win32 (сосносль или оконное субсистем) дергал уже ntdll.dll!NtCreateProcess
os2ss умела исполнять только 16-битные NE. Поддержку 32-битных LX так и не реализовали, хотя LX несильно отличается от LE, который был форматом VXD в Windows 3.x и 95/98/Me.
Но прецедент с Win32s, когда реально был добавлен новый формат, интересный.
Потом Win32 стал главным API для GUI, потом часть его переехала в ядро и у него появились свои сисколы! (часть USER и GDI вызовов), потом OS/2 (16 битная как ты верно заметил) и Posix стали никому не нужны, их выкинули, вот и настал черед NTVDM.
Кому нужна теперь вся эта абстрактность в win64?
Похожая история случилась с поддержкой CPU: в какой-то момент из всех платформ осталась только многопроцессная x86 и HAL стал примерно один: многопроцессный APIC (бо PIC не бывает для многопроцессных) HAL с ACPI (бо ACPI есть во всем, что выпущено после 1999 г). Стало не понятно зачем городили огорода
В диспетчере задач видно только conhost и ntvdm. У ntvdm есть окно и его видно как приложение. Conhost окон не имеет. Оба процесса запущены от имени юзера.
Значит, эмулятор — это тупо часть самого ntvdm.exe.
Кстати, до семёрки conhost не было: консоль поддерживалась службой csrss.
именно так. Потому сосноль была не кастомизуема кстати: чтобы не тянуть говна в и без того разбухший сервер поддержки win32api
Кстати, в 10ке conhost это затычка: почти всё реализовано в .dllке, коих там две: старая (для лохов) и новая (которая умеет alt+enter на весь экран, умное выделение итд)
А в XP это было не так
• В HAL для MIPS (проект HALTYNE) есть эмулятор x86, чтобы можно было исполнить код расширителя BIOS из видеокарточки, предназначенной для PC.
• В HAL есть ещё один эмулятор x86 (называется x86new), в нём makefile для i386, MIPS и PPC:
Кем он использовался, не знаю. Как уже где-то на ГК заметили, в современных Виндах эмулятор, встроенный в HAL, используется, чтобы выполнять код функций BIOS, не переключаясь в реальный режим (в 64-битных системах это важно, потому что не покидая «длинный» режим, это сделать невозможно).
• В NTVDM для Alpha, MIPS, PPC, как я уже заметил, был SoftPC. Код SoftPC и x86new из HAL совершенно разный.
• Как отдельные продукты выпустили Virtual PC и Hyper-V.
Он использовался HAL для некоторых Alpha, MIPS и PPC, чтобы исполнять код BIOS от железок, предназначенных для PC.
Кстати, почему в Windows не стали расшаривать код эмулятора, а взяли два разных?
Не менее интересно, как на таких машинах обстоят дела в других ОС. Они используют железо напрямую, в обход BIOS, встроенного в карту, или тоже содержат эмулятор, как NT? Достаточно ли крутая у них прошивка в своём ПЗУ, чтобы что-нибудь выводить в видеокарту до загрузки ОС?
Ябло юзало PPC до 2006, но они точно знали что там за железо и могли вшиться вот хоть в firmware.
Как ведут себя другие я не знаю, да и есть ли они в 2018 году эти самые другие?
Кто последний раз видал sparc?
На нём сделан неубиваемый ноутбук: http://ineum.ru/nt-mcst4r Но ноутбуку эмулятор не нужен, потому что всё железо фиксированное.
уже нет
теперь это честаня виртулака, хотя и плотно интегрированая с шедулером винды (как сендбокс)
Эмулятор из HAL:
AAM из HAL выглядит так:
Если перепишем "HAL" на "PHP", то сможем установить "Windows" на "PHP".