люди, кто сталкивался с такой проблемой ? есть PE exe'шник (создается из моей программы). под win9x работает на ура. под nt/2000/xp лоадер ругается, мол 'something.exe' is not valid win32 application. что за хрень ?
Здравствуйте Sergey Kirillov, Вы писали:
SK>люди, кто сталкивался с такой проблемой ? есть PE exe'шник (создается из моей программы). под win9x работает на ура. под nt/2000/xp лоадер ругается, мол 'something.exe' is not valid win32 application. что за хрень ?
>под nt/2000/xp
чем запускаешь?
сам или explorer-ом, far-ом, cmd, ...?
через (CreateProcess и выше) или более низкоуровнево?
какой подсистемы имидж?
просто известный "глюк", что Native-проги CreateProcess не запускает.
Правда, сомнительно, что это твой случай, раз на 9х работает.
ну хотя бы написал бы GUI или CUI, а то телепатией тут никто не страдает имхо.
Здравствуйте vasketsov, Вы писали:
V>чем запускаешь? V>сам или explorer-ом, far-ом, cmd, ...? V>через (CreateProcess и выше) или более низкоуровнево? V>какой подсистемы имидж?
V>просто известный "глюк", что Native-проги CreateProcess не запускает. V>Правда, сомнительно, что это твой случай, раз на 9х работает.
V>ну хотя бы написал бы GUI или CUI, а то телепатией тут никто не страдает имхо.
да я както мимоходом написал. но раз такая кухня то......
ОПИСАНИЕ ПРОБЛЕМЫ Дано:
Есть прога которая генерирует exe'шник. exe'шник довольно простой. 3 секции. первая неинициализированные данные. вторая данные + код. третья read-only данные. заголовки все проде нормальные (в конце письма есть результат dumpbin /ALL). Сабсистем = Windows CUI(3). Энтрипоинт установлен на начало второй секции. Прога отлично запускается под Win9X(как правило из Far'a).
Проблема:
Под Win NT/2K/XP при запуске тихонечко выходит (никаких сообщений — ничего). При попытке запуска под дебаггером(Visual Studio, OllyDbg) при открытии файла говорит что по адресу 77e878c1 access violation. Я так понимаю что это при загрузке валится лоадер. Почему для меня уже третий день загадка. Сначала думал что проблемы с alignment'ом секций. Но вроде уже по несколько раз перепроверил.
F1 !!!!!!!!!!!!!!!!!!!!!
/\/\/\ Dumpbin /ALL out.exe /\/\/Microsoft (R) COFF Binary File Dumper Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Dump of file out.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (i386)
3 number of sections
3D2189F8 time date stamp Tue Jul 02 13:09:44 2002
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
10F characteristics
Relocations stripped
Executable
Line numbers stripped
Symbols stripped
32 bit word machine
OPTIONAL HEADER VALUES
10B magic #
6.00 linker version
906A size of code
90DE size of initialized data
9E28 size of uninitialized data
B000 RVA of entry point
B000 base of code
15000 base of data
400000 image base
1000 section alignment
200 file alignment
4.00 operating system version
0.00 image version
4.00 subsystem version
0 Win32 version
16000 size of image
1000 size of headers
0 checksum
3 subsystem (Windows CUI)
0 DLL characteristics
100000 size of stack reserve
1000 size of stack commit
100000 size of heap reserve
1000 size of heap commit
0 loader flags
10 number of directories
0 [ 0] RVA [size] of Export Directory
0 [ 0] RVA [size] of Import Directory
0 [ 0] RVA [size] of Resource Directory
0 [ 0] RVA [size] of Exception Directory
0 [ 0] RVA [size] of Certificates Directory
0 [ 0] RVA [size] of Base Relocation Directory
0 [ 0] RVA [size] of Debug Directory
0 [ 0] RVA [size] of Architecture Directory
0 [ 0] RVA [size] of Special Directory
0 [ 0] RVA [size] of Thread Storage Directory
0 [ 0] RVA [size] of Load Configuration Directory
0 [ 0] RVA [size] of Bound Import Directory
0 [ 0] RVA [size] of Import Address Table Directory
0 [ 0] RVA [size] of Delay Import Directory
0 [ 0] RVA [size] of Reserved Directory
0 [ 0] RVA [size] of Reserved Directory
SECTION HEADER #1
SS0 name
9E28 virtual size
1000 virtual address
0 size of raw data
1000 file pointer to raw data
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
E0000080 flags
Uninitialized Data
Execute Read Write
SECTION HEADER #2
SS1 name
906A virtual size
B000 virtual address
9200 size of raw data
1000 file pointer to raw data
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
60000060 flags
Code
Initialized Data
Execute Read
RAW DATA #2
-- lots of raw data skipped --
SECTION HEADER #3
SS3 name
74 virtual size
15000 virtual address
200 size of raw data
A200 file pointer to raw data
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only
Здравствуйте Sergey Kirillov, Вы писали:
SK>люди, кто сталкивался с такой проблемой ? есть PE exe'шник (создается из моей программы). под win9x работает на ура. под nt/2000/xp лоадер ругается, мол 'something.exe' is not valid win32 application. что за хрень ?
SECTION HEADER #1
SS0 name
9E28 virtual size
1000 virtual address 0 size of raw data — будет загружено 0 байт?
1000 file pointer to raw data
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
E0000080 flags
Uninitialized Data
Execute Read Write
Здравствуйте ua1zcl, Вы писали:
SK>>люди, кто сталкивался с такой проблемой ? есть PE exe'шник (создается из моей программы). под win9x работает на ура. под nt/2000/xp лоадер ругается, мол 'something.exe' is not valid win32 application. что за хрень ?
U>SECTION HEADER #1 U>SS0 name U>9E28 virtual size U>1000 virtual address U>0 size of raw data — будет загружено 0 байт? U>1000 file pointer to raw data U>0 file pointer to relocation table U>0 file pointer to line numbers U>0 number of relocations U>0 number of line numbers U>E0000080 flags U>Uninitialized Data U>Execute Read Write
да. первая секция это неинициализированные данные. raw data size должен быть равен нулю.
Здравствуйте Dr.Golova, Вы писали:
SK>>0 [ 0] RVA [size] of Import Directory
D.G>Загрузчик НТ желает чтоб в файле была таблица импорта — иначе РЕ файл считается невалидным. Посравнению с 9х он вообще сильно придирается к файлам.
>Загрузчик НТ
ошибка возникает в kernel32.dll.
мне удавалось руками (ZwOpenFile/ZwCreatSection/..) запускать образы и с пустой таблицей импорта, и native-образы, которые CreateProcess-у не под силу. Так что имхо это не загрузчик выделывается, а CreateProcess перестраховывается.