Такой вопрос: почему в XP базово-независимый код запускается нормально, а в Win2000 нет? А если конкретнее: прога без импорта даже в отладчик не грузится. Пример: .386 .model flat,stdcall .code start: ret end start Это не работает в W2k, в XP без проблем. Единственное решение, которое я нашел (других не искал): .386 .model flat,stdcall include windows.inc include kernel32.inc includelib kernel32.lib .code StartOfShell: ret EndOfShell: invoke ExitProcess,0 end StartOfShell При это всё работает и там и там. Как это объяснить? Возможен ли запуск без импорта в Win2k?
Нет. В импортах обязательно должна быть kernel32.dll или любая другая dll ссылающаяся на нее. Но импорты эти использовать конечно же необязательно, они должны просто быть.
в 2k прога без импорта работать не будет - это известная фича этой OS найти исходники 2k и выяснить причину
Причина в том, что windows 2000 грузит в процесс только ntdll + явно импортируемые библиотеки. При старте первого потока происходит инициализация процесса внутри kernel32.dll, а ессли нет импорта, то это длл будет не загружена и процесс не запуститься.
Вообще-то уже 20 топиков на васме было по этой теме, такой пример работает в w2ksp4ru и xpsp2ru Код (Text): ;===================================================================== format pe gui at 0x79430000 ; imageBase kernel32.dll rb 1024*64 ; ~< sizeof kernel32.dll ;===================================================================== entry $ @@: jmp @b ;=====================================================================