подскажите что не так понять не могу в чем дело компилятор masm32, блокнот запускается Code (Text): .586 .model flat,stdcall include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .data prog db "c:\windows\notepad.exe",0 processInfo PROCESS_INFORMATION <> .data? startInfo dd ? .code start: invoke GetStartupInfo,ADDR startInfo invoke CreateProcess,NULL,offset prog,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,ADDR startInfo,ADDR processInfo invoke ExitProcess,0 end start тоже самое на cpp, компилятор VS2010 и пробовал еще VS2008 тоже самое - вываливается ошибка, блокнот не запускается Code (Text): #include "windows.h" void main() { STARTUPINFO startupInfo = {0}; startupInfo.cb = sizeof(startupInfo); PROCESS_INFORMATION processInformation; CreateProcess(NULL,L"c:\\windows\\notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation); } ошибка вываливаетсся следующая: Code (Text): Имя события проблемы: APPCRASH Имя приложения: test.exe Версия приложения: 0.0.0.0 Отметка времени приложения: 4c2e183e Имя модуля с ошибкой: kernel32.dll Версия модуля с ошибкой: 6.1.7600.16481 Отметка времени модуля с ошибкой: 4b1e3897 Код исключения: c0000005 Смещение исключения: 00039783 Версия ОС: 6.1.7600.2.0.0.256.1 Код языка: 1049 система windows семерка почему код скомпилированный под асм работает а на сях нет, помогите пожалуста нубу
10ton Имя приложения первым параметром передаётся. Как эту проблему идентифицировать. Выполняете бактрейс при загруженных отладочных символахи определяете ссылку, причём прототипы всех функций известны.
мне нужен обязательно вторым параметром т.к. будет вызываться файл с параметрами бактрейс можно поподробнее что это? хотяб мануалку куда рыть
если первый параметр использовать то работает везде и код на сях и на масме тож непонятно почему не работает на сях если вторым параметром пользоваться
10ton Бактрейс это развёртка цепочки стековых фреймов. Стековый фрейм - это область памяти адресуемая ссылкой в регистре Ebp, где лежит ссылка на следующий фрейм(связанный список) и локальные переменные. То что вы видите в олли нажав Alt+K это и есть результат бактрейса. Покажите скрин хотябы с местом где возникает сепшен.
мне оля написала вообще странную штуку когда я ей подсунул файл подготовленный на сях, неправильный чтоль pe-заголовок
мне как раз и нужно запускать прогу из командной строки с параметрами, поэтому и использую второй параметр
10ton Вам DbgPrint() не нужна, это пример бактрейса чтобы вы наглядно поняли что это такое %. Скрин был адресован изначально человеку с подобным вопросом. Скачиваете отладчик тут http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi Он поможет вам работать с отладочными символами. Устанавливаете и пишите в батник: Code (Text): "C:\Program Files\Debugging Tools for Windows (x86)\symchk.exe" c:\windows\system32\ntdll.dll /s Для kernel32.dll тоже символы стягиваете. Копируете пдб в каталог с олей(1.10) и останавливаетесь на сепшине(как JIT, брейк на диспетчер, либо просто запуск под олли). Потом Ctrl+A для тех двух модулей и смотрите бактрейс. Так вы найдёте имя процедуры в которой возникает ошибка. Регистр Ebp адресует параметры.
у меня работает: Code (Text): #include "windows.h" void main() { STARTUPINFO startupInfo = {0}; startupInfo.cb = sizeof(startupInfo); PROCESS_INFORMATION processInformation; CreateProcess(NULL,"c:\\windows.0\\notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation); } убрал "L" в "(NULL,L"c:\\w.." (путь заменил на свой c:\\windows.0\\notepad.exe ) компилятор mingw.
ага тоже скачал и установил тоже mingw работает замечательно! вот как раз мне для сравнения, для отладки рабочая и нерабочая версия на сях )
10ton На ошибку вроде бы уже указали - вы передаёте Unicode-строку в функцию, принимающую ANSI-строку.
10ton Пока вы сами не поймёте, таких вопросов будут тысячи. Следует общие методы знать, а не лишь частные.