运行时指令集检测

天下第一好大人 2013-07-10 10:23:32
如果给用户发布的是可执行文件,运行时检测用户的硬件和操作系统支持哪些指令集,从而决定该执行那个函数。

例如,有两个版本,同功能的函数
func
func_sse // 如果用户机器支持就用这个

那应该怎么实施?

1 设置全局函数指针,启动时先检测,然后将这些函数指针赋值,其它功能代码都调用这些函数指针。
2 做两个dll,里面都有同名函数,启动时检测,然后决定加载哪个dll,但是这需要手写加载库的代码。
3 还有更好的方法吗?
...全文
356 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
WJN92 2013-07-14
  • 打赏
  • 举报
回复
生成多个可执行文件,再写多一个调用程序。 这个方法效率应该最高
www_adintr_com 2013-07-12
  • 打赏
  • 举报
回复
用函数指针就很好了. 只是管理一下, 不要出现太多的全局变量指针, 弄的太乱就行. 要更好的话, 就只能是初始化的时候修改代码段, 把调用这些函数的 call 指令都改一遍. 改成 call 不同的地址. 就像重定位那样做.
  • 打赏
  • 举报
回复
难道要用到工厂模式,针对不同的指令集,生成不同的实例?
  • 打赏
  • 举报
回复
找到一个答案: 1 每次调用函数都检测,需要每个功能函数都写分支,最不可取。 2 第一次调用任何一个函数时处理,也是函数指针的方法,最开始所有的功能函数指针指向一个检测器函数,这样无论调用哪个功能都会首先进入检测器,在检测器内部将所有函数指针指向正确的版本。 3 初始化时处理,也是函数指针,程序启动时会首先运行这个初始化检测器,然后再执行正常流程。 4 启动时决定加载哪个dll 5 最新的操作系统有支持procedure linkage table (PLT)功能的,就是执行时链接。 6 弄个安装包,安装时决定copy哪个dll到用户路径。 7 生成多个可执行文件,由用户决定执行哪个。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧