проблема с функцией CreateProcess

Тема в разделе "WASM.BEGINNERS", создана пользователем 10ton, 2 июл 2010.

  1. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    подскажите что не так понять не могу в чем дело

    компилятор masm32, блокнот запускается
    Код (Text):
    1. .586
    2. .model flat,stdcall
    3. include \masm32\include\windows.inc
    4. include \masm32\include\kernel32.inc
    5. includelib \masm32\lib\kernel32.lib
    6. .data
    7. prog db "c:\windows\notepad.exe",0
    8. processInfo PROCESS_INFORMATION <>
    9. .data?
    10. startInfo dd ?
    11. .code
    12. start:
    13. invoke GetStartupInfo,ADDR startInfo
    14. invoke CreateProcess,NULL,offset prog,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,ADDR startInfo,ADDR processInfo
    15. invoke ExitProcess,0
    16. end start
    тоже самое на cpp, компилятор VS2010 и пробовал еще VS2008 тоже самое - вываливается ошибка, блокнот не запускается

    Код (Text):
    1. #include "windows.h"
    2. void main()
    3. {
    4. STARTUPINFO startupInfo = {0};
    5. startupInfo.cb = sizeof(startupInfo);
    6. PROCESS_INFORMATION processInformation;
    7. CreateProcess(NULL,L"c:\\windows\\notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation);
    8. }
    ошибка вываливаетсся следующая:
    Код (Text):
    1.  Имя события проблемы:    APPCRASH
    2.   Имя приложения:  test.exe
    3.   Версия приложения:    0.0.0.0
    4.   Отметка времени приложения:   4c2e183e
    5.   Имя модуля с ошибкой:    kernel32.dll
    6.   Версия модуля с ошибкой:  6.1.7600.16481
    7.   Отметка времени модуля с ошибкой: 4b1e3897
    8.   Код исключения:  c0000005
    9.   Смещение исключения:    00039783
    10.   Версия ОС:    6.1.7600.2.0.0.256.1
    11.   Код языка:    1049
    система windows семерка
    почему код скомпилированный под асм работает а на сях нет, помогите пожалуста нубу :)
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    10ton
    Имя приложения первым параметром передаётся. Как эту проблему идентифицировать. Выполняете бактрейс при загруженных отладочных символахи определяете ссылку, причём прототипы всех функций известны.
     
  3. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    мне нужен обязательно вторым параметром т.к. будет вызываться файл с параметрами
    бактрейс можно поподробнее что это? хотяб мануалку куда рыть :)
     
  4. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    если первый параметр использовать то работает везде и код на сях и на масме тож
    непонятно почему не работает на сях если вторым параметром пользоваться :dntknw:
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    10ton
    Бактрейс это развёртка цепочки стековых фреймов. Стековый фрейм - это область памяти адресуемая ссылкой в регистре Ebp, где лежит ссылка на следующий фрейм(связанный список) и локальные переменные. То что вы видите в олли нажав Alt+K это и есть результат бактрейса. Покажите скрин хотябы с местом где возникает сепшен.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Второй параметр это окружение процесса(командная строка), это не имя приложения.
     
  7. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    мне оля написала вообще странную штуку когда я ей подсунул файл подготовленный на сях, неправильный чтоль pe-заголовок

    [​IMG]
     
  8. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    мне как раз и нужно запускать прогу из командной строки с параметрами, поэтому и использую второй параметр
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    10ton
    Жмите оке. Нашёл кстате скрин свой на одном форуме:
    [​IMG]
    [​IMG]
     
  10. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    я немного не понял, мне надо DbgPrint найти да?
    я вот нашел вызов CreateProcess
    [​IMG]
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    10ton
    Вам DbgPrint() не нужна, это пример бактрейса чтобы вы наглядно поняли что это такое %. Скрин был адресован изначально человеку с подобным вопросом.
    Скачиваете отладчик тут http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi
    Он поможет вам работать с отладочными символами. Устанавливаете и пишите в батник:
    Код (Text):
    1. "C:\Program Files\Debugging Tools for Windows (x86)\symchk.exe" c:\windows\system32\ntdll.dll /s
    Для kernel32.dll тоже символы стягиваете. Копируете пдб в каталог с олей(1.10) и останавливаетесь на сепшине(как JIT, брейк на диспетчер, либо просто запуск под олли). Потом Ctrl+A для тех двух модулей и смотрите бактрейс. Так вы найдёте имя процедуры в которой возникает ошибка. Регистр Ebp адресует параметры.
     
  12. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    во круто! все четко и понятно! :) спасибо вам огромное, буду щас заморачиваться!
     
  13. bizdon

    bizdon Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    86
    у меня работает:
    Код (Text):
    1. #include "windows.h"
    2. void main()
    3. {
    4. STARTUPINFO startupInfo = {0};
    5. startupInfo.cb = sizeof(startupInfo);
    6. PROCESS_INFORMATION processInformation;
    7. CreateProcess(NULL,"c:\\windows.0\\notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation);
    8. }
    убрал "L" в "(NULL,L"c:\\w.." (путь заменил на свой c:\\windows.0\\notepad.exe )
    компилятор mingw.
     
  14. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    ага тоже скачал и установил тоже mingw :) работает замечательно!
    вот как раз мне для сравнения, для отладки рабочая и нерабочая версия на сях :))
     
  15. google

    google New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2007
    Сообщения:
    140
    10ton
    На ошибку вроде бы уже указали - вы передаёте Unicode-строку в функцию, принимающую ANSI-строку.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    10ton
    Пока вы сами не поймёте, таких вопросов будут тысячи. Следует общие методы знать, а не лишь частные.