开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 8426|回复: 123
收起左侧

[易源码分享] 【半教程类】加载64位Dll,底层执行64位命令

  [复制链接]
发表于 2023-1-11 17:09:33 | 显示全部楼层 |阅读模式   四川省宜宾市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -

前文:

正文:

  • 先浅讲一下这是怎么做到了吧。

    • 首先必须明确概念:x64系统下不能直接运行x86进程!64位CPU下不是运行的x86汇编!
    • AMD64架构是在IA32指令集上进行了拓展,主要包括新增寄存器,地址阔度加长等等,CPU兼容x86指令的根本原因是在AMD64架构下原x86的硬编码可以完全对于IA32构架下的x86的汇编指令!
    • 所以在现在的AMD64架构下的64位计算机兼容在x86程序时,根本没有运行任何x86汇编,而是继续在运行x64汇编的硬编码!(所以说什么x86程序相同指令运算效率不如x64程序的指令运算效率纯粹是鬼扯)
    • x86程序在64位系统上受到的限制主要是受到CS段寄存器影响,32位模式和64位模式的CS段寄存器相比,主要是关闭了强制平坦,启用了CPU x86指令解析和操作位数限制。
    • 因此可以修改CS段寄存器实现指令解析模式的互相转换。
    • 所以不要认为易语言程序在64位系统上还是x86程序,64位系统下不存在严格意义的x86程序,是Wow64子系统让你感觉不出来这个问题。
  • 再说我拓展了了什么内容,新增加了获取x64的ntdll的基质和导出表的命令,顺便封装了一下LdrLoadDll和LdrGetProcedureAddress,这样程序就可以实现随意加载x64Dll,然后只需加载kernelbase.dll(x64)和kernel32.dll,即可正常调用大部分的x64API。

  • 注意:不要想着去加载x64版本的user32.dll,跑不起来,绘制层的依赖过于复杂(不过有水平可以搞搞64位的win32u.dll,那个随便玩)

  • 测试了一下,确实能正常跑一些x64的库,具体更多内容自己去研究吧,这份代码的还是有很多内容可以拓展的。

  • 多提一句:切换到x64时为什么要保存fs寄存器?因为段寄存器不是你想象的那么简单,在AMD处理器上,syscall之后,段描述符会被放在CPU缓存中,在回到正常R3的代码后,你以为CS段寄存器已经恢复到x86正常了,实际上CPU还在用缓存中的段描述符,根本没法正常执行代码,一执行就会导致内存错误,所以需要讲fs寄存器保存下来,到时候用fs寄存器来恢复正常的DS和CS段寄存器。(注意:有调试器附加根本不会发现这个问题,因为有调试器运行的情况下,段寄存器会随调试器行为刷新,根本发现不了问题)

  • 代码中导出的x64的DebugActiveProcess就不用折腾了,用IDA看了NtDebugActiveProcess,这个命令被内核卡了,Wow64进程调试不了64位进程。

附件:


x64syscall.e (67.73 KB, 下载次数: 257)

评分

参与人数 17好评 +12 精币 +45 收起 理由
网络注册会员 + 1 + 1 支持开源~!感谢分享
吴小宝 + 1 支持开源~!感谢分享
dghjgg + 1 感谢分享,很给力!~
微风已过 + 1 感谢分享,很给力!~
a135123 + 1 + 2 支持开源~!感谢分享
易语言资源网 + 1 + 3 开源精神必须支持~
悟桐的深思 + 1 感谢分享,很给力!~
qiyuer + 1 感谢分享,很给力!~
Arui + 1 感谢分享,很给力!~
廿六 + 1 + 2 前排求字体配色
mumulu + 1 感谢分享,很给力!~
梦寻简单 + 1 + 3 新技能已get√
pipi9 + 1 + 2 YYDS~!
九亿少女的梦Xbl + 1 + 2 感谢分享,很给力!~
福仔 + 1 + 20 YYDS~!
a524666979 + 1 全是干货
冰点 + 1 + 5 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

发表于 昨天 13:37 | 显示全部楼层   天津市天津市
66666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 11 天

发表于 2024-4-18 12:38:43 | 显示全部楼层   河北省石家庄市
支持楼主开源
回复 支持 反对

使用道具 举报

签到天数: 12 天

发表于 2024-4-18 12:30:41 | 显示全部楼层   江西省南昌市
666666666666666
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2024-3-10 18:40:04 | 显示全部楼层   浙江省温州市
666666666666666666666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2024-3-10 18:39:49 | 显示全部楼层   浙江省温州市
66666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 10 天

发表于 2024-2-18 13:40:40 | 显示全部楼层   湖南省株洲市

感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2023-11-24 10:05:13 | 显示全部楼层   湖北省鄂州市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:68% (19/28)

签到天数: 22 天

发表于 2023-9-28 17:48:59 | 显示全部楼层   浙江省宁波市
点加载就闪退,不知道什么问题
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 5 天

发表于 2023-6-1 17:36:15 | 显示全部楼层   河南省郑州市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表