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

 eXeL@B —› Программирование —› CreateWindowExW
Посл.ответ Сообщение


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 29 ноября 2011 03:15
· Личное сообщение · #1

Проблема в том, что в программе после упаковки перестает работать CreateWindowExW
вываливается с ошибкой ERROR_INVALID_WINDOW_HANDLE
Причем параметры все передаются те же самые, что и не в упакованной...
Какие возможные причины могут быть связанные с данной ошибкой?
Заранее спасибо за ответ.

-----
aLL rIGHTS rEVERSED!





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 29 ноября 2011 06:22 · Поправил: PE_Kill
· Личное сообщение · #2

Ну так не бывает, выложил бы дизасм листинг вызова функции. Любые могут быть причины. Пакер не заполнили IAT, lpClassName, lpWindowName указывает(ют) на испорченную директорию, hInstance невалидный. Ну и хорошо бы было дернуть GetLastError, о чем в любой документации написано.

-----
Yann Tiersen best and do not fuck





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 29 ноября 2011 07:47 · Поправил: OnLyOnE
· Личное сообщение · #3

PE_Kill пишет:
GetLastError

выдает 578h

PE_Kill пишет:
дизасм листинг вызова функции


Code:
  1. 004230CF     55                       PUSH EBP
  2. 004230D0     8BEC                     MOV EBP,ESP
  3. 004230D2     56                       PUSH ESI
  4. 004230D3     57                       PUSH EDI
  5. 004230D4     8D73 08                  LEA ESI,DWORD PTR DS:[EBX+8]
  6. 004230D7     6A 00                    PUSH 0
  7. 004230D9     33C0                     XOR EAX,EAX
  8. 004230DB     8BFE                     MOV EDI,ESI
  9. 004230DD     E8 A5B80000              CALL 0042E987
  10. 004230E2     85C0                     TEST EAX,EAX
  11. 004230E4     75 0C                    JNZ SHORT 004230F2
  12. 004230E6     6A 0E                    PUSH 0E
  13. 004230E8     FF15 24A14F00            CALL DWORD PTR DS:[4FA124]     ; ntdll.RtlSetLastWin32Error
  14. 004230EE     33C0                     XOR EAX,EAX
  15. 004230F0     EB 60                    JMP SHORT 00423152
  16. 004230F2     33FF                     XOR EDI,EDI
  17. 004230F4     66:397D 1C               CMP WORD PTR SS:[EBP+1C],DI
  18. 004230F8   ^ 74 F4                    JE SHORT 004230EE
  19. 004230FA     53                       PUSH EBX
  20. 004230FB     E8 D2670000              CALL 004298D2
  21. 00423100     397D 18                  CMP DWORD PTR SS:[EBP+18],EDI
  22. 00423103     75 0C                    JNZ SHORT 00423111
  23. 00423105     F745 10 00000040         TEST DWORD PTR SS:[EBP+10],40000000
  24. 0042310C     74 03                    JE SHORT 00423111
  25. 0042310E     895D 18                  MOV DWORD PTR SS:[EBP+18],EBX
  26. 00423111     8B45 08                  MOV EAX,DWORD PTR SS:[EBP+8]
  27. 00423114     3BC7                     CMP EAX,EDI
  28. 00423116     75 08                    JNZ SHORT 00423120
  29. 00423118     B8 4C995500              MOV EAX,55994C
  30. 0042311D     8945 08                  MOV DWORD PTR SS:[EBP+8],EAX
  31. 00423120     8B48 04                  MOV ECX,DWORD PTR DS:[EAX+4]
  32. 00423123     8B70 0C                  MOV ESI,DWORD PTR DS:[EAX+C]
  33. 00423126     8B10                     MOV EDX,DWORD PTR DS:[EAX]
  34. 00423128     8B40 08                  MOV EAX,DWORD PTR DS:[EAX+8]
  35. 0042312B     57                       PUSH EDI
  36. 0042312C     FF35 84A75500            PUSH DWORD PTR DS:[55A784]
  37. 00423132     2BF1                     SUB ESI,ECX
  38. 00423134     FF75 18                  PUSH DWORD PTR SS:[EBP+18]
  39. 00423137     2BC2                     SUB EAX,EDX
  40. 00423139     57                       PUSH EDI
  41. 0042313A     56                       PUSH ESI
  42. 0042313B     50                       PUSH EAX
  43. 0042313C     0FB745 1C                MOVZX EAX,WORD PTR SS:[EBP+1C]
  44. 00423140     51                       PUSH ECX
  45. 00423141     52                       PUSH EDX
  46. 00423142     FF75 10                  PUSH DWORD PTR SS:[EBP+10]
  47. 00423145     FF75 0C                  PUSH DWORD PTR SS:[EBP+C]
  48. 00423148     50                       PUSH EAX
  49. 00423149     FF75 14                  PUSH DWORD PTR SS:[EBP+14]
  50. 0042314C     FF15 10A64F00            CALL DWORD PTR DS:[4FA610]      ; user32.CreateWindowExW
  51. 00423152     5F                       POP EDI
  52. 00423153     5E                       POP ESI
  53. 00423154     5D                       POP EBP
  54. 00423155     C2 1800                  RETN 18


Стек на входе в CreateWindowExW
Code:
  1. 0012E7B4   00423152  /CALL to CreateWindowExW from 0042314C
  2. 0012E7B8   00000000  |ExtStyle = 0
  3. 0012E7BC   0000C1B3  |Class = C1B3
  4. 0012E7C0   00534C0C  |WindowName = "UDLSW"
  5. 0012E7C4   00000000  |Style = WS_OVERLAPPED
  6. 0012E7C8   80000000  |= 80000000 (-2147483648.)
  7. 0012E7CC   80000000  |= 80000000 (-2147483648.)
  8. 0012E7D0   80000000  |Width = 80000000 (-2147483648.)
  9. 0012E7D4   80000000  |Height = 80000000 (-2147483648.)
  10. 0012E7D8   00000000  |hParent = NULL
  11. 0012E7DC   00000000  |hMenu = NULL
  12. 0012E7E0   00400000  |hInst = 00400000
  13. 0012E7E4   00000000  \lParam = NULL


Самое интересное что вызов CreateWindowExW происходит еще в функции CoInitializeEx в недрах ole32.dll,
так там тоже завершается с аналогичной ошибкой, хотя в не запакованном варианте все ок.
Code:
  1. 0041676D     55                       PUSH EBP
  2. 0041676E     8BEC                     MOV EBP,ESP
  3. 00416770     51                       PUSH ECX
  4. 00416771     51                       PUSH ECX
  5. 00416772     56                       PUSH ESI
  6. 00416773     57                       PUSH EDI
  7. 00416774     6A 02                    PUSH 2
  8. 00416776     33F6                     XOR ESI,ESI
  9. 00416778     56                       PUSH ESI
  10. 00416779     FF15 FCA64F00            CALL DWORD PTR DS:[4FA6FC]      ; ole32.CoInitializeEx <<<<< Вот здесь.
  11. 0041677F     56                       PUSH ESI
  12. 00416780     56                       PUSH ESI
  13. 00416781     56                       PUSH ESI
  14. 00416782     56                       PUSH ESI
  15. 00416783     FF15 14A64F00            CALL DWORD PTR DS:[4FA614]     ; user32.DefWindowProcW
  16. 00416789     8D45 F8                  LEA EAX,DWORD PTR SS:[EBP-8]
  17. 0041678C     50                       PUSH EAX
  18. 0041678D     C745 F8 08000000         MOV DWORD PTR SS:[EBP-8],8
  19. 00416794     C745 FC 14150000         MOV DWORD PTR SS:[EBP-4],1514
  20. 0041679B     FF15 24A04F00            CALL DWORD PTR DS:[4FA024]   ; comctl32.InitCommonControlsEx
  21. 004167A1     68 444C5300              PUSH 534C44                               ; UNICODE "RICHED20.DLL"
  22. 004167A6     FF15 84A14F00            CALL DWORD PTR DS:[4FA184]   ; kernel32.LoadLibraryW
  23. 004167AC     8BF0                     MOV ESI,EAX
  24. 004167AE     E8 66390100              CALL 0042A119
  25. 004167B3     E8 0BFDFFFF              CALL 004164C3
  26. 004167B8     56                       PUSH ESI
  27. 004167B9     8BF8                     MOV EDI,EAX
  28. 004167BB     FF15 94A14F00            CALL DWORD PTR DS:[4FA194]   ; kernel32.FreeLibrary
  29. 004167C1     E8 C5380100              CALL 0042A08B
  30. 004167C6     FF15 F8A64F00            CALL DWORD PTR DS:[4FA6F8]   ; ole32.CoUninitialize
  31. 004167CC     8BC7                     MOV EAX,EDI
  32. 004167CE     5F                       POP EDI
  33. 004167CF     5E                       POP ESI
  34. 004167D0     C9                       LEAVE
  35. 004167D1     C2 1000                  RETN 10


-----
aLL rIGHTS rEVERSED!





Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 29 ноября 2011 08:52
· Личное сообщение · #4

а под пакером функции возвращают нормальные значения?
Ну очень похоже что там пакер ловить данное исключение(возможно со следующим исправлением ситуации, или просто для своих нужд)
а ваще меня смутили эти строки
Code:
  1.   0012E7C8   80000000  |= 80000000 (-2147483648.)
  2. 0012E7CC   80000000  |= 80000000 (-2147483648.)
  3. 0012E7D0   80000000  |Width = 80000000 (-2147483648.)
  4. 0012E7D4   80000000  |Height = 80000000 (-2147483648.)





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 29 ноября 2011 09:46 · Поправил: PE_Kill
· Личное сообщение · #5

OnLyOnE пишет:
выдает 578h

ERROR_INVALID_WINDOW_HANDLE

-----
Yann Tiersen best and do not fuck





Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 29 ноября 2011 10:24
· Личное сообщение · #6

OnLyOnE
Посмотри идёт ли чнение имён WindowName и Class может прот поставил только на исполнение кода а на чтение запретил?

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





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

Создано: 29 ноября 2011 11:48
· Личное сообщение · #7

файл нужно выложить иначе долго это все будет.

-----
[nice coder and reverser]





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 29 ноября 2011 19:18
· Личное сообщение · #8

Разобрался... причина была в ImageSize файла...

-----
aLL rIGHTS rEVERSED!




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 29 ноября 2011 19:28
· Личное сообщение · #9

OnLyOnE

Шадов слишком большой, чтобы сказать причину ошибки. Я например что хорошо его знаю, ито не могу вам ответить.




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

Создано: 29 ноября 2011 19:58
· Личное сообщение · #10

закрыто.

-----
[nice coder and reverser]



 eXeL@B —› Программирование —› CreateWindowExW
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати