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

Discussion in 'WASM.BEGINNERS' started by 10ton, Jul 2, 2010.

  1. 10ton

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    подскажите что не так понять не могу в чем дело

    компилятор masm32, блокнот запускается
    Code (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 тоже самое - вываливается ошибка, блокнот не запускается

    Code (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. }
    ошибка вываливаетсся следующая:
    Code (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 Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    10ton
    Имя приложения первым параметром передаётся. Как эту проблему идентифицировать. Выполняете бактрейс при загруженных отладочных символахи определяете ссылку, причём прототипы всех функций известны.
     
  3. 10ton

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    мне нужен обязательно вторым параметром т.к. будет вызываться файл с параметрами
    бактрейс можно поподробнее что это? хотяб мануалку куда рыть :)
     
  4. 10ton

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    если первый параметр использовать то работает везде и код на сях и на масме тож
    непонятно почему не работает на сях если вторым параметром пользоваться :dntknw:
     
  5. Clerk

    Clerk Забанен

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

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Второй параметр это окружение процесса(командная строка), это не имя приложения.
     
  7. 10ton

    10ton New Member

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

    [​IMG]
     
  8. 10ton

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    мне как раз и нужно запускать прогу из командной строки с параметрами, поэтому и использую второй параметр
     
  9. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    10ton
    Жмите оке. Нашёл кстате скрин свой на одном форуме:
    [​IMG]
    [​IMG]
     
  10. 10ton

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    я немного не понял, мне надо DbgPrint найти да?
    я вот нашел вызов CreateProcess
    [​IMG]
     
  11. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    10ton
    Вам DbgPrint() не нужна, это пример бактрейса чтобы вы наглядно поняли что это такое %. Скрин был адресован изначально человеку с подобным вопросом.
    Скачиваете отладчик тут http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi
    Он поможет вам работать с отладочными символами. Устанавливаете и пишите в батник:
    Code (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

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    во круто! все четко и понятно! :) спасибо вам огромное, буду щас заморачиваться!
     
  13. bizdon

    bizdon Member

    Blog Posts:
    0
    Joined:
    Apr 7, 2009
    Messages:
    86
    у меня работает:
    Code (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

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    ага тоже скачал и установил тоже mingw :) работает замечательно!
    вот как раз мне для сравнения, для отладки рабочая и нерабочая версия на сях :))
     
  15. google

    google New Member

    Blog Posts:
    0
    Joined:
    Aug 10, 2007
    Messages:
    140
    10ton
    На ошибку вроде бы уже указали - вы передаёте Unicode-строку в функцию, принимающую ANSI-строку.
     
  16. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    10ton
    Пока вы сами не поймёте, таких вопросов будут тысячи. Следует общие методы знать, а не лишь частные.