Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› Как вызвать 64-битную dll из 32-битного процесса?
Посл.ответ Сообщение


Ранг: 71.9 (постоянный), 4thx
Активность: 0.040
Статус: Участник

Создано: 16 июня 2014 10:29
· Личное сообщение · #1

Вот понадобилась такая штука. Нужно организовать взаимодействие с этой DLL.
Передавать в нее строки и получать ответы. Какие могут быть пути?




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

Создано: 16 июня 2014 10:33
· Личное сообщение · #2

Никак, плодить х64 процесс и проксировать вызовы в него через IPC.



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 16 июня 2014 11:50 · Поправил: kunix
· Личное сообщение · #3

Ну вообще теоретически можно переключиться в режим x64 спец джампом и делать свои дела, но это жесточайший хак.
Во, нашел свой старый пост.
Почитайте тот тред, он полезный.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 19 июня 2014 21:20
· Личное сообщение · #4

kunix

> теоретически можно переключиться в режим x64

Из 32, давай, пробуй



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 19 июня 2014 22:58 · Поправил: kunix
· Личное сообщение · #5

Dr0p, дык попробовал же!
Компилять MASM-ом под x86. Номер сис вызова может меняться.
Code:
  1. x64_NtClose@4 proc
  2.          push    ebp
  3.          mov     ebp, esp     
  4.          mov     eax, [esp+8]
  5.          sub    esp, 20h
  6.          and     esp, 0FFFFFFF0h
  7.          
  8.          db     09ah              ;call 33:x64
  9.          dd     offset x64
  10.          dw     033h      
  11.          
  12.          mov   esp, ebp
  13.          pop     ebp
  14.          retn   4
  15.          
  16. x64:
  17.          mov     ecx, eax               ;movzxd rcx, eax
  18.          db      04Ch,08Bh,0D1h           ;mov r10, rcx
  19.          mov  eax, 0Ch         ;NtCloseHandle
  20.          syscall
  21.          ;sub esp, 0Ch
  22.          ;int 2Eh
  23.          retf
  24. x64_NtClose@4 endp




Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 19 июня 2014 23:15 · Поправил: dosprog
· Личное сообщение · #6

kunix,
а есть какая-нибудь надежда, что селектор 33h будет валидным на другой Win64bit системе, не вашей?





Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 19 июня 2014 23:38 · Поправил: kunix
· Личное сообщение · #7

dosprog, я не знаю, надо читать про heaven's gate. Я сам не читал.
В любом случае, передать селектор отдельным параметром - не проблема.




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

Создано: 21 июня 2014 00:46
· Личное сообщение · #8

kunix пишет:
передать селектор отдельным параметром

как Арчер уже написал, сразу IPC. все остальное - от лукавого

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




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

Создано: 26 июня 2014 17:48
· Личное сообщение · #9

Dr0p пишет:
Из 32, давай, пробуй


А мужики то не знают.

https://code.google.com/p/rewolf-wow64ext/
см X64Call

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


Ранг: 71.9 (постоянный), 4thx
Активность: 0.040
Статус: Участник

Создано: 26 июня 2014 21:55
· Личное сообщение · #10

Alchemistry спасибо то что нужно!


 eXeL@B —› Программирование —› Как вызвать 64-битную dll из 32-битного процесса?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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