能力值:
( LV3,RANK:20 )
51 楼
试了一下,win7+Delphi7,崩。用的也是附件的Dll。
最后于 2024-7-27 17:11
被bestbird编辑
,原因:
能力值:
( LV3,RANK:20 )
52 楼
可以试试附件,在win7和win10下均异常退出。不管是否IDE环境。
附件是源码+楼上的DLL文件+编译后的EXE。
最后于 2024-7-27 17:18
被bestbird编辑
,原因:
上传的附件:
能力值:
( LV3,RANK:20 )
53 楼
bestbird
别浪费时间了,32位进程是无法加载64位的DLL的。wow64ext其实是因为wow64进程内部加载了两个ntdll.dll:一个32位的,一个64位的,所以使用wow64ext,仅可以调用加载的nt ...
不好意思,64位进程的确是可以调用32位代码的,很多年前翻译过wow64ext,今天搜索了一下,的确是可以反过来调用的。http://blog.rewolf.pl/blog/?p=102:“
Running x86 code inside 64-bits process It is very similar to the previous case with just one small inconvenience. Because 64-bits version of MS C/C++ compiler doesn’t support inline assembly, all tricks should be done in a separate .asm file. Below there are definitions of X86_Start and X86_End macros for MASM64 :
X86_Start MACRO
LOCAL xx, rt call $+5
xx equ $ mov dword ptr [rsp + 4], 23h add dword ptr [rsp], rt - xx retf
rt:ENDMX86_End MACRO
db 6Ah, 33h ; push 33h
db 0E8h, 0, 0, 0, 0 ; call $+5
db 83h, 4, 24h, 5 ; add dword ptr [esp], 5
db 0CBh ; retfENDM ”
另外,github上面在2016年也有人写出了相应的代码,见附件。有空后我会看看。
上传的附件:
能力值:
( LV2,RANK:10 )
54 楼
tDasm
你那个dll有问题,用我这个DLL测试什么问题都没有。
tDasm 你这个test.dll是delphi写的吗
能力值:
( LV2,RANK:10 )
55 楼
tDasm 请问,delphi 12 编译64位程序 加入汇编 var hfun: pointer begi asm jmp hfun end; end; 这样会报错,32位就可以 请问怎么处理
能力值:
( LV3,RANK:20 )
56 楼
JJGuo
tDasm 请问,delphi 12 编译64位程序 加入汇编
var
hfun: pointer
begi
asm
jmp hfun
end;
end;
这样会 ...
64位的内镶汇编只能是单独的过程或函数,不支持类似32位这种。
能力值:
( LV3,RANK:20 )
57 楼
搞错了。这个是64位调用32位。 32位的调用64位的,使用那个wow64ext就可以了。 xRet:=X64Call(fnLdrLoadDll, 4, DWORD64(0), DWORD64(0), DWORD64(@ModuleName), DWORD64(@MyDll)); 也就是调用64位DLL里面的LdrLoadDll函数。但是经过测试,DLL不能使用user32里面的函数,否则会崩。 即使:先使用LdrLoadDll加载kernel32.dll,再使用里面的LoadLibraryW函数来加载也一样。如果Dll没有使用user32,一切运行良好。
能力值:
( LV3,RANK:20 )
58 楼
之前是在win10下测试正常。下午在win7试了一下,崩溃。决定放弃跟进。
找了一篇文章,里面介绍的解决方法无效:http://rce.co/knockin-on-heavens-gate-dynamic-processor-mode-switching/
附件的源码说支持win7和win10,支持个JB。浪费时间,法科。
另外请参考:
https://github.com/dadas190/Heavens-Gate-2.0/issues/2
--------------------------------------------------------------------------------------------------------- “RCECoder 评论 2023 年 10 月 31 日 • 在切换到 64 位模式的过程中,有一些 dll 加载不安全。Gdi32.dll Uxtheme.dll User32.dll 可能还有更多。 Shell32 出现特殊错误。由于线程信息块中 TLS 数组初始化不当而导致崩溃。(GS:[0x58] 为零) 此外, 所有 SxS dll 将无法正确加载并出现错误 0xC000007B STATUS_INVALID_IMAGE_FORMAT 这是因为 WinSxS Manager 仍然认为该进程是 32 位的,并尝试加载所请求 dll 的 32 位版本。重定向失败并指向 x86 文件夹,例如 comctl32.dll。它应该重定向到 amd64 文件夹。修复此类问题是一个相当漫长的过程,因为您必须手动重定向 dll,并通过解析清单或加载最新版本来确保版本正确。 这个问题没有简单的解决办法。WOW 转换不需要你做那么多,你必须不断修改,但仍然无法让它在所有 Windows 版本上正常工作。”
------------------------------------------------------------------------------------------------------------------
最后于 2024-7-28 19:57
被bestbird编辑
,原因:
上传的附件: