Сейчас на форуме: zds, UniSoft (+5 невидимых)

 eXeL@B —› Программирование —› Запустить Dll от Vista на XP/2003
Посл.ответ Сообщение

Ранг: 7.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 06:49
· Личное сообщение · #1

Пытаюсь заставить работать одну программку на XP/2003, написанную под висту. Использует системную библиотеку msvcrt.dll. Простое перетягивание этой библиотеки не помогло. Отказывается загружаться, при команде "regsvr32 msvcrt_.dll" не проходит даже LoadLibrary. Версию ОС в заголовке подправил, но видимо, этого мало, есть еще что-то. Dependency Walker показывает, что на 2003-м все импорты на месте. Если кто-то разбирается в отличиях PE-заголовков Висты и 2003, ткните пальцем, что ему еще не нравится. Буду очень признателен.

Файлики по ссылке ниже:
http://rghost.ru/43220631



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 22 января 2013 07:18 · Поправил: Vovan666
· Личное сообщение · #2

Depends.Exe в xp запускается без проблем.

Chrysalis пишет:
PE-заголовков Висты и 2003

Заголовки различаются разрядностью(x86,x64 и т.д), но никак не версией винды.



Ранг: 7.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 07:42
· Личное сообщение · #3

Depends.Exe - это Dependency Walker, запаковал для удобства

Vovan666 пишет:
Заголовки различаются разрядностью(x86,x64 и т.д), но никак не версией винды.


MajorSubsystemVersion / MinorSubsystemVersion / Win32VersionValue



Ранг: 42.9 (посетитель), 33thx
Активность: 0.040
Статус: Участник

Создано: 22 января 2013 09:15
· Личное сообщение · #4

У ntddl.dl EP=00000000.



Ранг: 7.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 14:15
· Личное сообщение · #5

Konstantin

А на 2003-м?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 22 января 2013 15:45
· Личное сообщение · #6

Если имеется в виду ntdll.dll, то это нормально, что у неё ЕП=0, это нативная либа. Хотя таскать с собой нативную либу от другой ОС как минимум странно, половина сисколлов не сойдётся.



Ранг: 7.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 17:19
· Личное сообщение · #7

Archer

Я для начала пытаюсь запустить msvcrt_.dll на 2003, там нативные либы вроде как не требуются.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 22 января 2013 17:43
· Личное сообщение · #8

Chrysalis
msvcrtXX не нужно "regsvr32 msvcrt_.dll". поставить рантайм

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 22 января 2013 18:17
· Личное сообщение · #9

Chrysalis пишет:
Пытаюсь заставить работать одну программку на XP/2003, написанную под висту



Chrysalis пишет:
Файлики по ссылке ниже:
http://rghost.ru/43220631


Не нашел в архиве ни одного exe, кроме Depends.Exe. О какой программе вообще идет речь?

-----
http://ntinfo.biz




Ранг: 7.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 18:22
· Личное сообщение · #10

ajax
msvcrt.dll - это системная либа, она не входит в рантаймы, это первое что я пытался сделать. Про regsvr32, я его исключительно для отладки использовал, там первая функция - LoadLibrary, на нее удобно было стать. Собственно на 2003 LoadLibrary и валится, под вистой или 7 все ОК. Что-то в заголовке не то.




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 22 января 2013 18:45
· Личное сообщение · #11

Chrysalis пишет:
Что-то в заголовке не то.


В заголовке все нормально.

-----
http://ntinfo.biz





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 22 января 2013 19:07 · Поправил: ajax
· Личное сообщение · #12

Chrysalis
кг/ам? нет чудес. и, пока не будет таргета - тут никто не подскажет. на вин-висте есть функи, которых нет в хп. если винда "потрепана" она даже об этом не сообщит

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 7.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 20:55 · Поправил: Chrysalis
· Личное сообщение · #13

ajax

Интересно, а что, для LoadLibrary еще что-то нужно, кроме самой либы?




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 22 января 2013 21:00
· Личное сообщение · #14

Chrysalis
libhandle:=LoadLibrary(libname);
if libHandle>0 then write('OK') else write(SysErrorMessage(GetLastError));

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 22 января 2013 22:37
· Личное сообщение · #15

Chrysalis пишет:
Интересно, а что, для LoadLibrary еще что-то нужно, кроме самой либы?


Если библиотека, которая загружается через LoadLibrary, нуждается в других библиотеках, которых нет или они неправильно настроены в системе, то LoadLibrary возвращает ошибку. Соответственно эти другие библиотеки могут нуждаться в третьих библиотеках. И так далее.
А так как вся эта порнография происходит динамически, то Dependency Walker не может это все отследить.

В любом случае без самого проекта ничего определенного сказать нельзя.

-----
http://ntinfo.biz





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 22 января 2013 22:47
· Личное сообщение · #16

Взял я и поглядел те файлы. Во-первых, таскать нативную либу-это зло. А без неё на ХР не пашет ввиду отсутствия импортов. Так что не надо говорить, что всё с ними кошерно. kernel32 не грузится, потому что не может сделать коннект к csr. А msvcrt не грузится, потому что версию явно проверяет на 6. Возьми и отладь точки входа. Не при чём там хедер.

| Сообщение посчитали полезным: Chrysalis

Ранг: 7.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 23 января 2013 04:07
· Личное сообщение · #17

Archer

Спасибо за первый реальный совет!

Archer пишет:
А msvcrt не грузится, потому что версию явно проверяет на 6.


Вот, блин! А как все просто то оказалось!

Archer пишет:
таскать нативную либу-это зло


Знаю, что зло, но это было в папке для XP, а им серьезно никто не занимался. Тут надо было хотя бы с 2003-м разобраться.

Раз уж разговор зашел про XP, может есть гуманные идеи, как недостающие импорты добавить в msvcrt из нативных либов от 2003-го?



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 23 января 2013 08:07
· Личное сообщение · #18

Chrysalis
Выложи уже свою пограмулину, при чем тут длл, которые ты насилуешь я хз. Вот отпатчишь ты проверку версии в msvcrt и че дальше? А если она внутри использует функции kernel32.dll, которых просто нет в хп? Тоже будем патчить? А если эти вызовы идут в несуществующие syscall'ы ntdll? Будем добавлять и заодно ядро с собой таскать и грузить чтоле?) Ежели в программе используется неспецифический рантайм можно попытаться сделать обертки.

Либо ставь вбокс с вистой и засовывай это все туда - победа. Ей богу тема из разряда как засунуть движок от мерседеса в инвалидку.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 23 января 2013 09:39
· Личное сообщение · #19

а если собрать ехе + длл и обернуть в VMware ThinApp ?

-----
[nice coder and reverser]



 eXeL@B —› Программирование —› Запустить Dll от Vista на XP/2003
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати