Нашлась другая программа, которая тоже использует вставки на 32-битном ассемблере. http://zsnes.com/ Для работы требует несколько 32-битных библиотек, но собирается без установки 32-битного окружения. Ковыряю, как собирается она. Как минимум, требуются ключи GCC -m32 и -march-athlon64 и для Nasm -f elf. Правда, модуль обработки SPC в ней глючит
cupuyc cmpayc Или, если асм всё же необходим, вынести соответствующие функции в отдельный модуль и вызывать их по мере необходимости.
Полторы тысячи строк на ассемблере. Неохота переписывать Благо он отдельным файлом и линкуется в отдельную библиотеку. И, кажется, понял, как такие программы собирать.
Так там и сделано. Вопрос был в том, как это скомпилировать и слинковать, не ставя вторую ОС в чрут Предложенный выше оверлей требует пересобирать половину установленных пакетов, поэтому я его пока отключил обратно.
Ничего не работает из invoke api причём всё кампилится, в чём дело не пойму. Переделанный beer не пашет Код (Text): include '%fasm%\win64ax.inc' entry start section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',winmm,'WINMM.DLL' include '%fasm%\api\kernel32.inc' import winmm,mciSendString,'mciSendStringA' _cmd_eject db 'set cdaudio door open',0 start: invoke mciSendString,_cmd_eject,0,0,0 exit: invoke ExitProcess,0 Добавление format PE64 GUI 5.0 ничего не даёт. И даже такое не пашет Код (Text): format PE64 GUI 5.0 include '%fasm%\win64ax.inc' entry start section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL' include '%fasm%\api\kernel32.inc' start: invoke Sleep,5000 exit: invoke ExitProcess,0 И тут я заметил, что с указанием секций section '.code' executable, что тоже важно и для .data стало заводиться даже без директивы format PE64, хотя в xp x86 это и без секций работало. Однако, api тут кривые. А какой смысл тогда в инклюдах! Удивительно, что из examples\win64 всё работает :]
Походу только invoke Sleep,5000 и валидно! Почему же элементарное не пашет! invoke ShellExecute,NULL,NULL,lpFile,NULL,NULL,SW_HIDE
А я знаю! =) Какраз и хотелось бы услышать об этом. Я сам макросы в таком объёме читать не решаюсь. Просто хотелось побыстрому перекампилить все фишки что у меня накопились, и посмотреть что из этого получиться. Вообще спрашивается зачем тогда ворох целый инклюдов, причём они все в win64ax.inc включены, если всё надо пушем самому готовить! 8)
Semiono гы... добавил, как в примере, в начале sub rsp, 8*5 - работает, падла... beer, по крайней мере пашет
0_0 +1 Крута! А как называедся api которая разрешает приложению system32\ DLL юзать? Или апи запрещающая редирект в sysWOW64, или нет таких?
Типа неработает почему-то Код (Text): include '%fasm%\win32ax.inc' entry start section '.rsrc' resource data readable directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions resource icons,\ 1,LANG_NEUTRAL,icon_data1,\ 2,LANG_NEUTRAL,icon_data2,\ 3,LANG_NEUTRAL,icon_data3,\ 4,LANG_NEUTRAL,icon_data4 resource group_icons,17,LANG_NEUTRAL,main_icon resource versions,1,LANG_NEUTRAL,version icon main_icon,\ icon_data1,'%fasm%\exec1.ico',\ icon_data2,'%fasm%\exec2.ico',\ icon_data3,'%fasm%\exec3.ico',\ icon_data4,'%fasm%\exec4.ico' versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\ 'FileDescription','restart...',\ 'LegalCopyright','2001-2005 GmbH',\ 'FileVersion','1.0.0.0',\ 'ProductVersion','1.0.0.0',\ 'OriginalFilename','restart.exe',\ 'Company','Semiono' section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL' include '%fasm%\api\kernel32.inc' include '%fasm%\api\shell32.inc' lpFile db 'shutdown.exe',0 lpParameters db '-r -f -t 00',0 start: invoke ShellExecute,NULL,NULL,lpFile,lpParameters,NULL,SW_HIDE exit: invoke ExitProcess,0 Бинарь лежит в system32, то-есть в пути, даже если кликнуть его не работает. Причём другие команды из ShellExecute() выполняются. У меня есть код програмной перезагрузки, но тут дело принципа почему это не пашет?
Да, точно! Я забыл, я заметил, что в x64 системе это более критично, сам заметил. В x86 это было по барабану. Угу! Ок!